Tassos

Ταξινόμηση με μέθοδο της κατάταξης ( Rank Sort).

Oct 28th, 2014
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.29 KB | None | 0 0
  1. {                                      Visit:    http://g-lts.info/    for more code!                            }
  2.  
  3. #include <stdio.h>
  4. #include <string.h> /* Για να χρησιμοποιήσω την συνάρτηση memmove() */
  5.  
  6. #define ARRAY_MAX 6
  7.  
  8.  
  9. void rank_sort ( int a[] );
  10. /* Υλοποίηση του αλγορίθμου "ταξινόμηση με κατάταξη" -Rank Sort- . */
  11.  
  12.  
  13. void printArray( int a[] );
  14. /* Εμφανίζει τα στοιχεία του πίνακα που δέχεται ως παράμετρο. */
  15.  
  16.  
  17.  
  18. int main (void)
  19. {
  20.     int a[] = { 44,  21,  78,  16,  56,  21 } ; /* 6 θέσεων. */
  21. /* Ταξινομημένα ->  16   21   21   44   56   78  . */
  22.  
  23.  
  24. /* Εμφάνιση του αταξινόμητου πίνακα : */
  25. printArray(a);
  26.  
  27. /* Ταξινόμηση με τον αλγόριθμο rank sort : */
  28. rank_sort(a);
  29.  
  30.  
  31.  
  32. /* Εμφάνιση του ταξινομημένου πλέον πίνακα :  */
  33. printArray(a);
  34.  
  35.  
  36. return 0;
  37. }
  38.  
  39.  
  40.  
  41. /* ============================================================================================================== */
  42.  
  43.  
  44. /*=============================================================================*/
  45. /* ===============================- RANK SORT -=============================== */
  46. /*=============================================================================*/
  47.  
  48. void rank_sort ( int a[] )
  49. {
  50. int rank[ARRAY_MAX] = {0}; /* Δήλωση του πίνακα RANK που στην κάθε θέση του θα περιέχει την RANK τιμή της αντίστοιχης θέσης του πίνακα a[]. */
  51. int temp[ARRAY_MAX] = {0} ; /* Βοηθητικό πίνακας. */
  52.  
  53. int current, key;
  54. int j; /* Ο δείκτης που θα εξετάζει κάθε φορά από την αρχή τον πίνακα ( ώστε να βρούμε το rank του current στοιχείου )  */
  55. int rank_value = 0;
  56.  
  57.  
  58. for ( current = 0; current < ARRAY_MAX; current++ )
  59.     {
  60.    
  61.     key = a[current]; /* Το στοιχείο της εξεταζόμενης θέσης. */
  62.    
  63.     /* Θα πάρω τον πίνακα από την αρχή.. */
  64.     for ( j = 0 , rank_value = 0 ; j < ARRAY_MAX; j++ )
  65.    
  66.     {
  67.         /* Αν ήμαστε από τα αριστερά ( < ) του τρέχοντος εξεταζόμενου στοιχείου, μετράμε ΚΑΙ τα ίσα ΚΑΙ τα μικρότερα :  */
  68.         if ( ( j < current ) && ( a[j] <= key ) )
  69.             rank_value++;
  70.        
  71.         /* Αν ήμαστε από τα δεξιά ( > ) του τρέχοντος εξεταζόμενου στοιχείου, μετράμε τα μικρότερα ΜΟΝΟ. */
  72.         if ( ( j > current ) && ( a[j] < key ) )
  73.             rank_value++;
  74.     }
  75.    
  76.     rank[ current ] = rank_value; /* Το rank του στοιχείου. */
  77.  
  78.    
  79.     }
  80.  
  81. /* Ως εδώ, έχουμε τον πίνακα RANK που δείχνει η κάθε θέση του, την τιμή κατάταξης του στοιχείου της αντίστοιχης θέσεις του πίνακα α[]  . */
  82.  
  83. /* Εκτυπώνω την rank τιμή που αντιστοιχεί στις αντίστοιχες θέσεις του πίνακα a[] : */
  84. printArray( rank );
  85.  
  86.  
  87.  
  88. for ( current=0; current<ARRAY_MAX; current++)
  89.     temp[ rank[current] ] = a[current]; /* Πήγαινε στην θέση που δείχνει η rank τιμή του στοιχείο και βάλε το στοιχείο του α. */
  90.    
  91.  
  92.  
  93.    
  94. memmove( a, temp, sizeof(temp) ); /* Αντιγράφει τον πίνακα temp στον πίνακα a.*/
  95. /* memmove (προς, από, θέσεις_μνήμης_που_θα_αντιγραφούν ) */
  96.  
  97.  
  98. }
  99. /* ============================================================================================================== */
  100.  
  101.  
  102.  
  103.  
  104. /* ==================== Υλοποίηση της συνάρτησης που εμφανίζει τον πίνακα. ==================== */
  105. void printArray( int a[] )
  106. {
  107.  
  108.     int i = 0 ;
  109.  
  110.     for ( i = 0; i < ARRAY_MAX; i++ )
  111.         printf( "%d " , a[i] );
  112.    
  113.     printf("\n");
  114.  
  115. }
  116.  
  117. /* ============================================================================================================== */
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125. {                                      Visit:    http://g-lts.info/    for more code!                            }
Advertisement
Add Comment
Please, Sign In to add comment