Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- void radix_sort(int arr[], int SIZE, int base)
- {
- int i, j = 0, max, iteration = 1, *bucket, *semisorted;
- max = find_max(arr, SIZE);
- semisorted = (int *)malloc(sizeof(int)*SIZE);
- if (semisorted == NULL)
- exit(1);
- while (max/iteration!=0)
- {
- bucket = (int *)calloc(sizeof(int), SIZE);
- if (bucket == NULL)
- exit(1);
- for (i = 0; i < SIZE; i++)
- bucket[(arr[i] / iteration) % 10]++;
- for (i = 1; i < base; i++)
- bucket[i] += bucket[i - 1];
- for (i = SIZE - 1; i >= 0; i--)
- semisorted[--bucket[(arr[i] / iteration) % 10]] = arr[i];
- for (i = 0; i < SIZE; i++)
- arr[i] = semisorted[i];
- iteration *= 10;
- free(bucket);
- }
- }
- int find_max(int arr[], int SIZE)
- {
- int i, maxx = -1;
- for (i = 0; i < SIZE; i++)
- {
- if (maxx < arr[i])
- maxx = arr[i];
- }
- return maxx;
- }
- void main()
- {
- int temp = 0, i, b, size=0, *ar;
- printf("Please enter a size of the array\n");
- do {
- scanf_s("%d", &size);
- printf("The size must be at least 2 numbers\n");
- } while (size<1);
- ar = (int *)malloc(sizeof(int)*size);
- if (ar == NULL)
- exit(1);
- printf("Please enter a base 2,8 or 10\n");
- do {
- scanf_s("%d", &b);
- printf("Please enter a base 2,8 or 10\n");
- } while (b != 2 && b != 8 && b != 10);
- printf("Enter number into array for the same base that you choesd \n");
- for (i = 0; i <size; i++)
- {
- scanf_s("%d", &ar[i]);
- temp = *(ar + i);
- while (temp != 0)
- {
- if (temp % 10 < b)
- temp /= 10;
- else
- {
- printf("This number bigger then the base \n");
- exit(1);
- }
- }
- }
- radix_sort(ar, size, b);
- for (i = 0; i < size; i++)
- printf("%d ", *(ar + i));
- free(ar);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement