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