Добавил:
alex20000
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:sem6_4
.c#include <stdio.h>
#include <stdlib.h>
#define SWAP(type, a, b) {type tmp = a; a = b; b=tmp;}
int num_digits(int a)
{
int result = 0;
while(a != 0)
{
result++;
a /= 10;
}
return result;
}
int ten_pow(int a)
{
int result = 1;
for(int i = 0; i != a; ++i)
{
result *= 10;
}
return result;
}
void radix_sort(int* arr, int len)
{
int max = arr[0];
for(int i = 0; i != len; ++i)
{
if(arr[i] > max)
max = arr[i];
}
int max_len = num_digits(max);
int* arrays[10];
int array_sizes[10];
for(int i = 0; i != 10; ++i)
{
arrays[i] = (int*)malloc(sizeof(int) * len);
array_sizes[i] = 0;
}
for(int i = 0; i != max_len; ++i)
{
for(int j = 0; j != len; ++j)
{
int digit = (arr[j] / ten_pow(i)) % 10;
arrays[digit][array_sizes[digit]++] = arr[j];
}
int counter = 0;
for(int j = 0; j != 10; ++j)
{
for(int k = 0; k != array_sizes[j]; ++k)
{
arr[counter++] = arrays[j][k];
}
array_sizes[j] = 0;
}
}
for(int i = 0; i != 10; ++i)
{
free(arrays[i]);
}
}
int counting_sort(int* arr, int len)
{
int max = arr[0];
for(int i = 0; i != len; ++i)
{
if(arr[i] > max)
max = arr[i];
}
int* counts = (int*)malloc((max + 1) * sizeof(int) );
for(int i = 0; i != max; ++i)
{
counts[i] = 0;
}
for(int i = 0; i != len; ++i)
{
counts[arr[i]]++;
}
int* result = (int*)malloc(len * sizeof(int));
int counter = 0;
for(int i = 0; i <= max; ++i)
{
for(int j = 0; j != counts[i]; ++j)
result[counter++] = i;
}
for(int i = 0; i != len; ++i)
{
arr[i] = result[i];
}
free(result);
}
int main()
{
int* arr;
int* arr2;
int N;
scanf("%d", &N);
arr = (int*)malloc(sizeof(int) * N);
arr2 = (int*)malloc(sizeof(int) * N);
for(int i = 0; i != N; ++i)
{
arr[i] = rand() % 1000000;
printf("%d ", arr[i]);
}
putchar('\n');
radix_sort(arr, N);
for(int q = 0; q != N; ++q)
printf("%d ", arr[q]);
putchar('\n');
for(int i = 0; i != N; ++i)
{
arr2[i] = rand() % 255;
printf("%d ", arr2[i]);
}
putchar('\n');
counting_sort(arr2, N);
for(int q = 0; q != N; ++q)
printf("%d ", arr2[q]);
putchar('\n');
return 0;
}
Соседние файлы в предмете Информатика