Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- { 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! }
Advertisement
Add Comment
Please, Sign In to add comment