Tassos

Rank Sort

Oct 28th, 2014
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.42 KB | None | 0 0
  1. {                                      Visit:   http://g-lts.info/  for more code!                            }
  2.  
  3. #include <stdio.h>
  4.  
  5. #define ARRAY_MAX 6
  6.  
  7.  
  8. void rank_sort ( int a[], int new_a[] );
  9. /* Υλοποίηση του αλγορίθμου "ταξινόμηση με κατάταξη" -Rank Sort- . */
  10.  
  11. struct rankarray
  12.     {
  13.     int rank_value; /* Η rank τιμή που βρίσκεται */
  14.     int value; /* Η τιμή του εξεταζόμενου στοιχείου που βρέθηκε το rank. */
  15.     } ;
  16.  
  17.  
  18.  
  19.  
  20.  
  21. int main (void)
  22. {
  23. int a[] = {44,  21,  78,  16,  56,  21} ;
  24.        /*  16   21   21   44   56   78  <==  Ταξινομημένα. */
  25. int new_a[] = {-1,  -1,  -1,  -1, -1,  -1} ;
  26. int i;
  27.  
  28. for (i=0; i<ARRAY_MAX; i++)
  29.     printf("%d ", a[i]);
  30.  
  31. rank_sort(a, new_a);
  32.  
  33.  
  34.  
  35. /* Εμφάνιση του ταξινομημένου πλέον πίνακα.  */
  36. printf("\n");
  37. for (i=0; i<ARRAY_MAX; i++)
  38.     printf("%d ", a[i]);
  39. printf("\n");
  40.  
  41.  
  42. return 0;
  43. }
  44.  
  45. /*=============================================================================*/
  46. /* ===============================- RANK SORT -=============================== */
  47. /*=============================================================================*/
  48.  
  49. void rank_sort ( int a[], int new_a[] )
  50. {
  51. struct rankarray rank[ARRAY_MAX] ; /* Δήλωση πίνακα που στην κάθε θέση του θα περιέχει δύο στοιχεία. */
  52.  
  53. int i, key;
  54. int b;/* Ο δείκτης που εξετάζει "προς τα κάτω - αριστερά" - μέχρι την αρχή του πίνακα. */
  55. int e; /* Ο δείκτης που εξετάζει "προς τα πάνω - δεξιά" - μέχρι το τέλος του πίνακα. */
  56. int rank_value = 0;
  57.  
  58.  
  59. for (i=0; i<ARRAY_MAX; i++)
  60.     {
  61.    
  62.     key = a[i]; /* Το στοιχείο της εξεταζόμενης θέσης. */
  63.     for (b = i-1, e = i+1, rank_value = 0; (b>=0) || (e<ARRAY_MAX); b--, e++ ) /* Όσο δεν έχουν τερματίσει ΚΑΙ ΟΙ ΔΥΟ δείκτες. */
  64.         {
  65.         if ( (b>=0) && (a[b] <= key) ) /* Προς τα αριστερά μετράμε και τα ίσα & τα μικρότερα. */
  66.             rank_value++;
  67.            
  68.         if ( (e<ARRAY_MAX) && (a[e] < key) ) /* Προς τα δεξιά μετράμε τα μικρότερα ΜΟΝΟ. */
  69.             rank_value++;
  70.         }
  71.     rank[i].rank_value = rank_value; /* Το rank του στοιχείου. */
  72.     rank[i].value = a[i]; /* Και αποθηκεύω στην ίδια θέση του πίνακα και το στοιχείο που προέκυψε το εν λόγο rank. */
  73.    
  74.     }
  75.  
  76. /* Ως εδώ, έχουμε τον πίνακα RANK που δείχνει η κάθε θέση του, την τιμή κατάταξης της αντίστοιχης θέσεις του πίνακα α[]  . */
  77.  
  78. printf("\n");
  79.    
  80. for (i=0; i<ARRAY_MAX; i++) /* Εκτυπώνω μόνο την rank τιμή που η κάθε τιμή αντιστοιχεί στις αντίστοιχες θέσεις του πίνακα a[]*/
  81.     printf("%d  ", rank[i].rank_value);
  82.    
  83. for ( i=0; i<ARRAY_MAX; i++)
  84.     a[rank[i].rank_value] = rank[i].value; /* Πήγαινε στον πίνακα a[], στην θέση που δείχνει η τιμή rank_value και βάλε την τιμή του πεδίου value */
  85.    
  86.  
  87.  
  88.  
  89. }
  90.  
  91.  
  92.  
  93.  
  94. {                                      Visit:   http://g-lts.info/  for more code!                            }
Advertisement
Add Comment
Please, Sign In to add comment