Ladies_Man

#SORT__Radix Date sort (Поразрядная для дат)

Dec 17th, 2013
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define max_day 31
  4. #define min_day 1
  5. #define max_month 12
  6. #define min_month 1
  7. #define max_year 2030
  8. #define min_year 1970
  9.  
  10. struct Date { int day, month, year; };
  11.  
  12. int main()
  13. {
  14.     int i, n;
  15.     scanf ("%d", &n);
  16.  
  17.     struct Date arr[n];
  18.     struct Date temp_arr[n];
  19.  
  20.     void radixsort (int marker, int range)
  21.     {
  22.         int i, temp, bucket[100] = { 0 };
  23.         if (marker == 1) {
  24.             for (i = 0; i < n; i++) {
  25.                 temp = arr[i].day - min_day;
  26.                 bucket[temp]++;
  27.             }
  28.         }
  29.         else if (marker == 2) {
  30.                 for (i = 0; i < n; i++) {
  31.                     temp = arr[i].month - min_month;
  32.                     bucket[temp]++;
  33.                 }
  34.             }
  35.             else {
  36.                 for (i = 0; i < n; i++) {
  37.                 temp = arr[i].year - min_year;
  38.                     bucket[temp]++;
  39.                 }
  40.             }
  41.         for (i = 1; i < range; i++) bucket[i] += bucket[i - 1];
  42.  
  43.         if (marker == 1) {
  44.             for (i = n - 1; i >= 0; i--) {
  45.                 temp = arr[i].day - min_day;
  46.                 temp_arr[--bucket[temp]] = arr[i];
  47.             }
  48.         }
  49.         else
  50.             if (marker == 2) {
  51.                 for (i = n - 1; i >= 0; i--) {
  52.                     temp = arr[i].month - min_month;
  53.                     temp_arr[--bucket[temp]] = arr[i];
  54.                 }
  55.             }
  56.             else {
  57.                 for (i = n - 1; i >= 0; i--) {
  58.                     temp = arr[i].year - min_year;
  59.                     temp_arr[--bucket[temp]] = arr[i];
  60.                 }
  61.             }
  62.  
  63.         for (i = 0; i < n; i++) arr[i] = temp_arr[i];
  64.     }
  65.  
  66.     for (i = 0; i < n; i++) {
  67.         scanf ("%d", &arr[i].year);
  68.         scanf ("%d", &arr[i].month);
  69.         scanf ("%d", &arr[i].day);
  70.     }
  71.  
  72.     int band = max_day;/
  73.     int pointer = 1;
  74.     radixsort (pointer, band);
  75.  
  76.     band = max_month;
  77.     pointer = 2;
  78.     radixsort (pointer, band);
  79.  
  80.     band = max_year - min_year + 1;
  81.     pointer = 3;
  82.     radixsort (pointer, band);
  83.  
  84.     for (i = 0; i < n; i++) {
  85.         printf ("%d ", arr[i].year);
  86.  
  87.             printf ("%d ", arr[i].month);
  88.  
  89.             printf ("%d\n", arr[i].day);
  90.     }
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment