{ 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