isefire

gc_quicksort.h

Mar 5th, 2016
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.02 KB | None | 0 0
  1. // Header file where the generic magic happens
  2. // Must run g++ -E to see what's happening
  3. #include <time.h>
  4.  
  5. #define TOKEN(x, y) x ## y
  6.  
  7. #define QUICK_SORT(T) TOKEN(quick_sort_, T)
  8.  
  9. #define PARTITION(T) TOKEN(partition_, T)
  10.  
  11. #define PRINT_ARR(T) TOKEN(print_arr_, T)
  12.  
  13. #define CHOOSE(T) TOKEN(choose_type_, T)
  14.  
  15.  
  16. int PARTITION (TYPE) (TYPE * nums, int lo, int hi){
  17.     TYPE pivot = nums[hi];
  18.     int i = lo; //Place for swapping
  19.     int j;
  20.     for (j = lo; j < hi; ++j){
  21.         if (nums[j] <= pivot){
  22.             TYPE temp = nums[i];
  23.             nums[i] = nums[j];
  24.             nums[j] = temp;
  25.             i = i + 1;
  26.         }
  27.     }
  28.     TYPE temp = nums[i];
  29.     nums[i] = nums[hi];
  30.     nums[hi] = temp;
  31.     return i;    
  32. }
  33.  
  34. TYPE* QUICK_SORT (TYPE) (TYPE * nums, int lo, int hi){
  35.     if (lo < hi){
  36.         int p = PARTITION (TYPE) (nums, lo, hi);
  37.         QUICK_SORT (TYPE) (nums, lo, p - 1);
  38.         QUICK_SORT (TYPE) (nums, p + 1, hi);
  39.     }
  40.  
  41. }
  42.  
  43. void PRINT_ARR (TYPE) (TYPE * nums, int size, int type){
  44.     for (int i = 0; i < size; i++){
  45.         PRINT ;
  46.     }
  47.     printf("%s", "\n");
  48. }
  49.  
  50. void CHOOSE (TYPE) (int argc, char** argv, int type){
  51.     // Creates character array with 255 bytes
  52.     char buff[255];
  53.    
  54.     char *end;
  55.     // Makes argv[2] lowercase
  56.     int size = strtol(argv[3], &end, 10);
  57.     TYPE nums[size];
  58.     // Declare and try to open file by name
  59.     FILE *f;
  60.     f = fopen(argv[1], "r");
  61.  
  62.     int first = 0;
  63.     // Error block
  64.     if (f==NULL) perror("Error opening file");
  65.     else {
  66.         while (!feof(f)) {
  67.             //Doesn't print empty buff
  68.             if (first != 0){
  69.                 nums[first-1] = READ ;
  70.             }
  71.             fscanf(f, "%s", buff);
  72.             first = first + 1;
  73.         }
  74.     }
  75.     //PRINT_ARR (TYPE) (nums, size, type);
  76.     time_t tstart, tend;
  77.     tstart = clock();
  78.     QUICK_SORT (TYPE) (nums, 0, size-1);
  79.     tend=clock();
  80.     long t = (tend-tstart); // CLOCKS_PER_SEC;
  81.     long C = CLOCKS_PER_SEC;
  82.     printf("%Ld\n", t);
  83.     printf("CLOCKS_PER_SEC: %Ld\n", C);
  84.     //PRINT_ARR (TYPE) (nums, size, type);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment