Tassos icon

Ταξινόμηση πίνακα με μέθοδο της επιλογής (selection sort).

Tassos | PRO | 08/06/14 07:05:16 PM UTC | 0 ⭐ | 412 👁️ | Never ⏰ | []
C |

4.37 KB

|

None

|

0 👍

/

0 👎

{                                      Visit:   http://g-lts.info/  for more code!                            }
 
#include <stdio.h>
 
/* Ταξινόμηση κατά φθίνουσα σειρά πίνακα με την μέθοδο της επιλογής
( selection sort ). */
 
#define NMAX 10
 
 
int smaller ( int v[], int vstart ,int vend);
/* Συνάρτηση που βρίσκει την ΘΈΣΗ με την μικρότερη τιμή σε ένα πίνακα. */
/* 
Παίρνει: 
     Ένα πίνακα ακεραίων.
     Την αρχή του πίνακα ( από που να αρχίσει ).
     Την τελευταία ΘΈΣΗ του πίνακα.
Επιστρέφει:
     Την ΘΈΣΗ με την μικρότερη τιμή στον πίνακα.
     Αλλιώς αποστρέφει -1.
====================================================================*/
 
void arrayswap (int v[], int pos1, int pos2);
/* Συνάρτηση που κάνει εναλλαγή ΤΙΜΏΝ μεταξύ ΘΈΣΕΩΝ σε ένα πίνακα. */
/*
Παίρνει : 
    Ένα πίνακα ακεραίων.
    Την πρώτη ΘΈΣΗ εναλλαγής.
    Την δεύτερη ΘΈΣΗ εναλλαγής.
    *Το μήκος του πίνακα δε χρειάζεται, υποτίθεται pos1<=pos2<=μήκος-πίνακα.
        
Επιστρέφει : 
    Επειδή η μεταβίβαση του πίνακα γίνεται μέσω αναφοράς,
επιστρέφει τον πίνακα που πήρε, αλλά με την εναλλαγή των τιμών
στις ΘΈΣΕΙΣ που την κάνει.
    
====================================================================*/
 
 
int main(void)
{
 
int array[NMAX] = {8, 16, 37, 55, 4, 10, 7, 5, 6, 2};
/* Ταξινομημένο :  2, 4, 5, 6, 7, 8, 10, 16, 37,55 */
 
int i = 0;
int posmin;
 
for (i; i<NMAX; i++)
      /* Βρίσκουμε αρχικά την ΘΈΣΗ με την μικρότερη τιμή μέσα στον πίνακα. */
    if ( ( posmin = smaller(array, i, NMAX) ) != -1) /* Αν υπάρχει μικρότερη τιμή πέρα του i (ΑΠΌ ΕΚΕΊ ΚΑΙ ΠΈΡΑ) στον πίνακα  */
        arrayswap(array, i, posmin); /* Εναλλάσσει το περιεχόμενο της θέσης i του πίνακα με το περιεχόμενο της θέσης που βρήκαμε πως έχει την μικρότερη τιμή.  */
 
for (i=0; i<NMAX; i++)
    printf("%d\n", array[i]);
 
return 0;
}
 
 
 
/*==============================================================================*/
/* Συνάρτηση που βρίσκει την ΘΈΣΗ με την μικρότερη τιμή σε ένα πίνακα. */
/*==============================================================================*/
 
int smaller ( int v[], int vstart ,int vend)
 
{
 
int min = v[vstart]; /* Βάζω (στα τυφλά) ότι στο ΠΕΡΙΕΧΌΜΕΝΟ της πρώτης ΘΈΣΗΣ του πίνακα, είναι η μικρότερη τιμή. */
int posmin = -1;
 
for (vstart; vstart<vend; vstart++)
    if ( v[vstart] < min ) /* Αν βρεθεί μικρότερο, από το μικρότερο που έχουμε μέχρι τώρα. */
        {
        min = v[vstart]; /* Αποθηκεύουμε αυτό ως μικρότερο πλέον */
        posmin = vstart; /* Και κρατάω την θέση ;) */
        }
return posmin; /* Επιστρέφω την ΘΈΣΗ του πίνακα που υπάρχει η μικρότερη τιμή. */
}
 
 
/*==============================================================================*/
/* Συνάρτηση που κάνει εναλλαγή ΤΙΜΏΝ μεταξύ ΘΈΣΕΩΝ σε ένα πίνακα. */
/*==============================================================================*/
void arrayswap (int v[], int pos1, int pos2)
{
int swap = v[pos1]; /* Πετάω το περιεχόμενο της πρώτης θέσης σε μια προσωρινή μεταβλητή. */
v[pos1] = v[pos2]; /* Το περιεχόμενο της δεύτερης στην πρώτη θέση που πήρε. */
v[pos2] = swap; /* Το περιεχόμενο της πρώτης στην δεύτερη θέση που πήρε. */
}
 
 
{                                      Visit:   http://g-lts.info/  for more code!                            }

Comments