Tassos icon

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

Tassos | PRO | 10/28/14 11:38:49 AM UTC | 0 ⭐ | 396 👁️ | Never ⏰ | []
C |

4.29 KB

|

None

|

0 👍

/

0 👎

{                                      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!                            }

Comments