Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- { Visit: http://g-lts.info/ for more code! }
- #include <stdio.h>
- #include <string.h> /* Για να χρησιμοποιήσω την συνάρτηση memmove() */
- #define ARRAY_MAX 6
- void rank_sort ( int a[] );
- /* Υλοποίηση του αλγορίθμου "ταξινόμηση με κατάταξη" -Rank Sort- . */
- void printArray( int a[] );
- /* Εμφανίζει τα στοιχεία του πίνακα που δέχεται ως παράμετρο. */
- int main (void)
- {
- int a[] = { 44, 21, 78, 16, 56, 21 } ; /* 6 θέσεων. */
- /* Ταξινομημένα -> 16 21 21 44 56 78 . */
- /* Εμφάνιση του αταξινόμητου πίνακα : */
- printArray(a);
- /* Ταξινόμηση με τον αλγόριθμο rank sort : */
- rank_sort(a);
- /* Εμφάνιση του ταξινομημένου πλέον πίνακα : */
- printArray(a);
- return 0;
- }
- /* ============================================================================================================== */
- /*=============================================================================*/
- /* ===============================- RANK SORT -=============================== */
- /*=============================================================================*/
- void rank_sort ( int a[] )
- {
- int rank[ARRAY_MAX] = {0}; /* Δήλωση του πίνακα RANK που στην κάθε θέση του θα περιέχει την RANK τιμή της αντίστοιχης θέσης του πίνακα a[]. */
- int temp[ARRAY_MAX] = {0} ; /* Βοηθητικό πίνακας. */
- int current, key;
- int j; /* Ο δείκτης που θα εξετάζει κάθε φορά από την αρχή τον πίνακα ( ώστε να βρούμε το rank του current στοιχείου ) */
- int rank_value = 0;
- for ( current = 0; current < ARRAY_MAX; current++ )
- {
- key = a[current]; /* Το στοιχείο της εξεταζόμενης θέσης. */
- /* Θα πάρω τον πίνακα από την αρχή.. */
- for ( j = 0 , rank_value = 0 ; j < ARRAY_MAX; j++ )
- {
- /* Αν ήμαστε από τα αριστερά ( < ) του τρέχοντος εξεταζόμενου στοιχείου, μετράμε ΚΑΙ τα ίσα ΚΑΙ τα μικρότερα : */
- if ( ( j < current ) && ( a[j] <= key ) )
- rank_value++;
- /* Αν ήμαστε από τα δεξιά ( > ) του τρέχοντος εξεταζόμενου στοιχείου, μετράμε τα μικρότερα ΜΟΝΟ. */
- if ( ( j > current ) && ( a[j] < key ) )
- rank_value++;
- }
- rank[ current ] = rank_value; /* Το rank του στοιχείου. */
- }
- /* Ως εδώ, έχουμε τον πίνακα RANK που δείχνει η κάθε θέση του, την τιμή κατάταξης του στοιχείου της αντίστοιχης θέσεις του πίνακα α[] . */
- /* Εκτυπώνω την rank τιμή που αντιστοιχεί στις αντίστοιχες θέσεις του πίνακα a[] : */
- printArray( rank );
- for ( current=0; current<ARRAY_MAX; current++)
- temp[ rank[current] ] = a[current]; /* Πήγαινε στην θέση που δείχνει η rank τιμή του στοιχείο και βάλε το στοιχείο του α. */
- memmove( a, temp, sizeof(temp) ); /* Αντιγράφει τον πίνακα temp στον πίνακα a.*/
- /* memmove (προς, από, θέσεις_μνήμης_που_θα_αντιγραφούν ) */
- }
- /* ============================================================================================================== */
- /* ==================== Υλοποίηση της συνάρτησης που εμφανίζει τον πίνακα. ==================== */
- void printArray( int a[] )
- {
- int i = 0 ;
- for ( i = 0; i < ARRAY_MAX; i++ )
- printf( "%d " , a[i] );
- printf("\n");
- }
- /* ============================================================================================================== */
- { Visit: http://g-lts.info/ for more code! }
Advertisement
Add Comment
Please, Sign In to add comment