Tassos icon

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

Tassos | PRO | 10/25/14 06:48:06 PM UTC | 0 ⭐ | 365 👁️ | Never ⏰ | []
C |

3.5 KB

|

None

|

0 👍

/

0 👎

{                                      Visit:   http://g-lts.info/  for more code!                            }
 
#include <stdio.h>
 
#define MAX_VALUE 10
 
void insertion_sort ( int arr[] );
/* Ταξινόμηση με την μέθοδο της εισαγωγή ( Insertion Sort ) κατά αύξουσα σειρά. */
 
 
int main ( void )
{
int pinakas [] = {15, 52, -5, 430, 3,  5, 44, 89,  9,  5};
/* Ταξινομημένο : -5   3   5   5   9  15  44  52  89  430 */
 
int i;
/* ===- Εμφάνιση στοιχείων του αταξινόμητου πίνακα. -=== */
for ( i=0; i<MAX_VALUE; i++ )
    printf("%d ", pinakas[i]) ;
/* ===================================================== */
 
insertion_sort ( pinakas );
 
/* ===- Εμφάνιση στοιχείων του πλέον ταξινομημένου πίνακα. -=== */
printf("\n");
for ( i=0; i<MAX_VALUE; i++ )
    printf("%d ", pinakas[i]) ;
printf("\n");
/* =========================================================== */
 
 
return 0;
}
 
 
 
/*==========================================================================================*/
/* =================================- Insertion Sort -======================================*/
/*==========================================================================================*/
void insertion_sort ( int arr[] )
 
{
int i;
 
for (i = 1; i < MAX_VALUE; i++) /* Από την -ΔΕΎΤΕΡΗ- ΘΈΣΗ του πίνακα.. έως .. το τέλος. */
    {
        
    int key = arr[i]; /*  Αποθηκεύουμε εδώ προσωρινά το τρέχων εξεταζόμενο στοιχείο που ελέγχεται. */
    
    int j = i - 1; /* Το j είναι ο δείκτης που βλέπει ΠΆΝΤΑ μία θέση ΠΡΙΝ το i και θα πηγαίνει -προς τα πίσω- ΜΌΝΟ.
    Θα βλέπει δηλαδή "αριστερά" του πίνακα. Ο υποπίνακας που βλέπει ο j είναι ο "ταξινομημένος προς το παρών υποπίνακας". */
    
    
    while ( (j >= 0) && (key < arr[j]) ) /* Όσο ΔΕΝ έχουμε φτάσει στη πρώτη θέση του πίνακα
&& ΌΣΟ το νέο ΝΕΟ στοιχείο που ελέγχεται ( από τον "ΜΗ ταξινομημένο ΥΠΟπίνακα" -που βρίσκεται στα δεξιά- ) είναι ΜΙΚΡΌΤΕΡΟ από το στοιχείο που δείχνει ο δείκτης j που "βλέπει" στον "ταξινομημένο ΥΠΟπίνακα"  */
        {
        
        arr[j + 1] = arr[j]; /* Το περιεχόμενο πάει μια θέση ΔΕΞΙΆ (μπροστά) επειδή θέλουμε αύξουσα ταξινόμηση. */
        j--; /* Πάμε άλλη μια θέση πίσω. */
        /* Γενικά μετατοπίζονται όσα είναι μικρότερα του -key- μία θέση εμπρός ( η μοναδική τιμή που χάνετε είναι αυτή της θέσης που ΠΉΡΑΜΕ το key ) αλλά και για αυτό ακριβώς τον λόγο δε μας νοιάζει. ;)  */
        }
        
        
    arr[j + 1] = key; /* Αν το στοιχείο πλέον που βρίσκεται στην θέση j ΔΕΝ είναι μικρότερο του key, τότε οκ πάμε μια θέση εμπρός και εκχωρούμε το key. */
            
    }
    
 
 
}
 
 
 
{                                      Visit:   http://g-lts.info/  for more code!                            }

Comments