Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2015
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. extern "C" void radixsort(unsigned tab[], int n, int k);
  4.  
  5. void print_array(char *title, unsigned *array, size_t size);
  6.  
  7. int get_nth_bit(unsigned number, int n)
  8. {
  9.     return (number >> n) & static_cast<unsigned>(1);
  10. }
  11.  
  12. void radix_sort_rec_c(unsigned *array, size_t size, int bit)
  13. {
  14.     int left_one_index = 0, right_zero_index = size - 1;
  15.  
  16.     if(size == 0)
  17.         return;
  18.  
  19.     while(1)
  20.     {
  21.         while(left_one_index < size && !get_nth_bit(array[left_one_index], bit)) left_one_index++;
  22.         while(right_zero_index >= 0 && get_nth_bit(array[right_zero_index], bit)) right_zero_index--;
  23.  
  24.         if(left_one_index >= right_zero_index)
  25.             break;
  26.  
  27.         unsigned temp = array[left_one_index];
  28.         array[left_one_index] = array[right_zero_index];
  29.         array[right_zero_index] = temp;
  30.     }
  31.  
  32.     if(bit == 0)
  33.         return;
  34.  
  35.     radix_sort_rec_c(array, left_one_index, bit - 1);
  36.     radix_sort_rec_c(array + left_one_index, size - left_one_index, bit - 1);
  37. }
  38.  
  39. void radix_sort_c(unsigned *array, size_t size)
  40. {
  41.     radix_sort_rec_c(array, size, 31);
  42. }
  43.  
  44. void print_array(char *title, unsigned *array, size_t size)
  45. {
  46.     printf("%s:\n", title);
  47.  
  48.     for(int i = 0; i < size; i++)
  49.     {
  50.         printf("%d ", array[i]);
  51.     }
  52.  
  53.     printf("\n");
  54. }
  55.  
  56. int main(int argc, char **argv)
  57. {
  58.     printf("Hello world!\n");
  59.  
  60.     printf("Radix sort\n");
  61.     unsigned first_array[10] = {10, 213, 241, 14, 513, 23, 152, 0, 41, 52};
  62.     size_t first_size = 10;
  63.    
  64.     print_array("Unsorted array", first_array, first_size);
  65.     radixsort(first_array, first_size, 31);
  66.     print_array("Sorted array", first_array, first_size);
  67.  
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement