Tassos

Ταξινόμηση με μέθοδο της εισαγωγής ( Insertion Sort).

Oct 25th, 2014
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.50 KB | None | 0 0
  1. {                                      Visit:   http://g-lts.info/  for more code!                            }
  2.  
  3. #include <stdio.h>
  4.  
  5. #define MAX_VALUE 10
  6.  
  7. void insertion_sort ( int arr[] );
  8. /* Ταξινόμηση με την μέθοδο της εισαγωγή ( Insertion Sort ) κατά αύξουσα σειρά. */
  9.  
  10.  
  11. int main ( void )
  12. {
  13. int pinakas [] = {15, 52, -5, 430, 3,  5, 44, 89,  9,  5};
  14. /* Ταξινομημένο : -5   3   5   5   9  15  44  52  89  430 */
  15.  
  16. int i;
  17. /* ===- Εμφάνιση στοιχείων του αταξινόμητου πίνακα. -=== */
  18. for ( i=0; i<MAX_VALUE; i++ )
  19.     printf("%d ", pinakas[i]) ;
  20. /* ===================================================== */
  21.  
  22. insertion_sort ( pinakas );
  23.  
  24. /* ===- Εμφάνιση στοιχείων του πλέον ταξινομημένου πίνακα. -=== */
  25. printf("\n");
  26. for ( i=0; i<MAX_VALUE; i++ )
  27.     printf("%d ", pinakas[i]) ;
  28. printf("\n");
  29. /* =========================================================== */
  30.  
  31.  
  32. return 0;
  33. }
  34.  
  35.  
  36.  
  37. /*==========================================================================================*/
  38. /* =================================- Insertion Sort -======================================*/
  39. /*==========================================================================================*/
  40. void insertion_sort ( int arr[] )
  41.  
  42. {
  43. int i;
  44.  
  45. for (i = 1; i < MAX_VALUE; i++) /* Από την -ΔΕΎΤΕΡΗ- ΘΈΣΗ του πίνακα.. έως .. το τέλος. */
  46.     {
  47.        
  48.     int key = arr[i]; /*  Αποθηκεύουμε εδώ προσωρινά το τρέχων εξεταζόμενο στοιχείο που ελέγχεται. */
  49.    
  50.     int j = i - 1; /* Το j είναι ο δείκτης που βλέπει ΠΆΝΤΑ μία θέση ΠΡΙΝ το i και θα πηγαίνει -προς τα πίσω- ΜΌΝΟ.
  51.     Θα βλέπει δηλαδή "αριστερά" του πίνακα. Ο υποπίνακας που βλέπει ο j είναι ο "ταξινομημένος προς το παρών υποπίνακας". */
  52.    
  53.    
  54.     while ( (j >= 0) && (key < arr[j]) ) /* Όσο ΔΕΝ έχουμε φτάσει στη πρώτη θέση του πίνακα
  55. && ΌΣΟ το νέο ΝΕΟ στοιχείο που ελέγχεται ( από τον "ΜΗ ταξινομημένο ΥΠΟπίνακα" -που βρίσκεται στα δεξιά- ) είναι ΜΙΚΡΌΤΕΡΟ από το στοιχείο που δείχνει ο δείκτης j που "βλέπει" στον "ταξινομημένο ΥΠΟπίνακα"  */
  56.         {
  57.        
  58.         arr[j + 1] = arr[j]; /* Το περιεχόμενο πάει μια θέση ΔΕΞΙΆ (μπροστά) επειδή θέλουμε αύξουσα ταξινόμηση. */
  59.         j--; /* Πάμε άλλη μια θέση πίσω. */
  60.         /* Γενικά μετατοπίζονται όσα είναι μικρότερα του -key- μία θέση εμπρός ( η μοναδική τιμή που χάνετε είναι αυτή της θέσης που ΠΉΡΑΜΕ το key ) αλλά και για αυτό ακριβώς τον λόγο δε μας νοιάζει. ;)  */
  61.         }
  62.        
  63.        
  64.     arr[j + 1] = key; /* Αν το στοιχείο πλέον που βρίσκεται στην θέση j ΔΕΝ είναι μικρότερο του key, τότε οκ πάμε μια θέση εμπρός και εκχωρούμε το key. */
  65.            
  66.     }
  67.    
  68.  
  69.  
  70. }
  71.  
  72.  
  73.  
  74. {                                      Visit:   http://g-lts.info/  for more code!                            }
Advertisement
Add Comment
Please, Sign In to add comment