Tassos icon

Rank Sort

Tassos | PRO | 10/28/14 08:51:12 AM UTC | 0 ⭐ | 411 👁️ | Never ⏰ | []
C |

3.42 KB

|

None

|

0 👍

/

0 👎

{                                      Visit:   http://g-lts.info/  for more code!                            }
 
#include <stdio.h>
 
#define ARRAY_MAX 6
 
 
void rank_sort ( int a[], int new_a[] );
/* Υλοποίηση του αλγορίθμου "ταξινόμηση με κατάταξη" -Rank Sort- . */
 
struct rankarray
    {
    int rank_value; /* Η rank τιμή που βρίσκεται */
    int value; /* Η τιμή του εξεταζόμενου στοιχείου που βρέθηκε το rank. */
    } ; 
 
 
 
 
 
int main (void)
{
int a[] = {44,  21,  78,  16,  56,  21} ;
       /*  16   21   21   44   56   78  <==  Ταξινομημένα. */
int new_a[] = {-1,  -1,  -1,  -1, -1,  -1} ;
int i;
 
for (i=0; i<ARRAY_MAX; i++)
    printf("%d ", a[i]);
 
rank_sort(a, new_a);
 
 
 
/* Εμφάνιση του ταξινομημένου πλέον πίνακα.  */
printf("\n");
for (i=0; i<ARRAY_MAX; i++)
    printf("%d ", a[i]);
printf("\n");
 
 
return 0;
}
 
/*=============================================================================*/
/* ===============================- RANK SORT -=============================== */
/*=============================================================================*/
 
void rank_sort ( int a[], int new_a[] )
{
struct rankarray rank[ARRAY_MAX] ; /* Δήλωση πίνακα που στην κάθε θέση του θα περιέχει δύο στοιχεία. */
 
int i, key;
int b;/* Ο δείκτης που εξετάζει "προς τα κάτω - αριστερά" - μέχρι την αρχή του πίνακα. */
int e; /* Ο δείκτης που εξετάζει "προς τα πάνω - δεξιά" - μέχρι το τέλος του πίνακα. */
int rank_value = 0;
 
 
for (i=0; i<ARRAY_MAX; i++)
    {
    
    key = a[i]; /* Το στοιχείο της εξεταζόμενης θέσης. */
    for (b = i-1, e = i+1, rank_value = 0; (b>=0) || (e<ARRAY_MAX); b--, e++ ) /* Όσο δεν έχουν τερματίσει ΚΑΙ ΟΙ ΔΥΟ δείκτες. */
        {
        if ( (b>=0) && (a[b] <= key) ) /* Προς τα αριστερά μετράμε και τα ίσα & τα μικρότερα. */
            rank_value++;
            
        if ( (e<ARRAY_MAX) && (a[e] < key) ) /* Προς τα δεξιά μετράμε τα μικρότερα ΜΟΝΟ. */
            rank_value++;
        }
    rank[i].rank_value = rank_value; /* Το rank του στοιχείου. */
    rank[i].value = a[i]; /* Και αποθηκεύω στην ίδια θέση του πίνακα και το στοιχείο που προέκυψε το εν λόγο rank. */
    
    }
 
/* Ως εδώ, έχουμε τον πίνακα RANK που δείχνει η κάθε θέση του, την τιμή κατάταξης της αντίστοιχης θέσεις του πίνακα α[]  . */
 
printf("\n");
    
for (i=0; i<ARRAY_MAX; i++) /* Εκτυπώνω μόνο την rank τιμή που η κάθε τιμή αντιστοιχεί στις αντίστοιχες θέσεις του πίνακα a[]*/
    printf("%d  ", rank[i].rank_value);
    
for ( i=0; i<ARRAY_MAX; i++)
    a[rank[i].rank_value] = rank[i].value; /* Πήγαινε στον πίνακα a[], στην θέση που δείχνει η τιμή rank_value και βάλε την τιμή του πεδίου value */
    
 
 
 
}
 
 
 
 
{                                      Visit:   http://g-lts.info/  for more code!                            }

Comments