Tassos

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

Aug 6th, 2014
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.37 KB | None | 0 0
  1. {                                      Visit:   http://g-lts.info/  for more code!                            }
  2.  
  3. #include <stdio.h>
  4.  
  5. /* Ταξινόμηση κατά φθίνουσα σειρά πίνακα με την μέθοδο της επιλογής
  6. ( selection sort ). */
  7.  
  8. #define NMAX 10
  9.  
  10.  
  11. int smaller ( int v[], int vstart ,int vend);
  12. /* Συνάρτηση που βρίσκει την ΘΈΣΗ με την μικρότερη τιμή σε ένα πίνακα. */
  13. /*
  14. Παίρνει:
  15.      Ένα πίνακα ακεραίων.
  16.      Την αρχή του πίνακα ( από που να αρχίσει ).
  17.      Την τελευταία ΘΈΣΗ του πίνακα.
  18. Επιστρέφει:
  19.      Την ΘΈΣΗ με την μικρότερη τιμή στον πίνακα.
  20.      Αλλιώς αποστρέφει -1.
  21. ====================================================================*/
  22.  
  23. void arrayswap (int v[], int pos1, int pos2);
  24. /* Συνάρτηση που κάνει εναλλαγή ΤΙΜΏΝ μεταξύ ΘΈΣΕΩΝ σε ένα πίνακα. */
  25. /*
  26. Παίρνει :
  27.     Ένα πίνακα ακεραίων.
  28.     Την πρώτη ΘΈΣΗ εναλλαγής.
  29.     Την δεύτερη ΘΈΣΗ εναλλαγής.
  30.     *Το μήκος του πίνακα δε χρειάζεται, υποτίθεται pos1<=pos2<=μήκος-πίνακα.
  31.        
  32. Επιστρέφει :
  33.     Επειδή η μεταβίβαση του πίνακα γίνεται μέσω αναφοράς,
  34. επιστρέφει τον πίνακα που πήρε, αλλά με την εναλλαγή των τιμών
  35. στις ΘΈΣΕΙΣ που την κάνει.
  36.    
  37. ====================================================================*/
  38.  
  39.  
  40. int main(void)
  41. {
  42.  
  43. int array[NMAX] = {8, 16, 37, 55, 4, 10, 7, 5, 6, 2};
  44. /* Ταξινομημένο :  2, 4, 5, 6, 7, 8, 10, 16, 37,55 */
  45.  
  46. int i = 0;
  47. int posmin;
  48.  
  49. for (i; i<NMAX; i++)
  50.       /* Βρίσκουμε αρχικά την ΘΈΣΗ με την μικρότερη τιμή μέσα στον πίνακα. */
  51.     if ( ( posmin = smaller(array, i, NMAX) ) != -1) /* Αν υπάρχει μικρότερη τιμή πέρα του i (ΑΠΌ ΕΚΕΊ ΚΑΙ ΠΈΡΑ) στον πίνακα  */
  52.         arrayswap(array, i, posmin); /* Εναλλάσσει το περιεχόμενο της θέσης i του πίνακα με το περιεχόμενο της θέσης που βρήκαμε πως έχει την μικρότερη τιμή.  */
  53.  
  54. for (i=0; i<NMAX; i++)
  55.     printf("%d\n", array[i]);
  56.  
  57. return 0;
  58. }
  59.  
  60.  
  61.  
  62. /*==============================================================================*/
  63. /* Συνάρτηση που βρίσκει την ΘΈΣΗ με την μικρότερη τιμή σε ένα πίνακα. */
  64. /*==============================================================================*/
  65.  
  66. int smaller ( int v[], int vstart ,int vend)
  67.  
  68. {
  69.  
  70. int min = v[vstart]; /* Βάζω (στα τυφλά) ότι στο ΠΕΡΙΕΧΌΜΕΝΟ της πρώτης ΘΈΣΗΣ του πίνακα, είναι η μικρότερη τιμή. */
  71. int posmin = -1;
  72.  
  73. for (vstart; vstart<vend; vstart++)
  74.     if ( v[vstart] < min ) /* Αν βρεθεί μικρότερο, από το μικρότερο που έχουμε μέχρι τώρα. */
  75.         {
  76.         min = v[vstart]; /* Αποθηκεύουμε αυτό ως μικρότερο πλέον */
  77.         posmin = vstart; /* Και κρατάω την θέση ;) */
  78.         }
  79. return posmin; /* Επιστρέφω την ΘΈΣΗ του πίνακα που υπάρχει η μικρότερη τιμή. */
  80. }
  81.  
  82.  
  83. /*==============================================================================*/
  84. /* Συνάρτηση που κάνει εναλλαγή ΤΙΜΏΝ μεταξύ ΘΈΣΕΩΝ σε ένα πίνακα. */
  85. /*==============================================================================*/
  86. void arrayswap (int v[], int pos1, int pos2)
  87. {
  88. int swap = v[pos1]; /* Πετάω το περιεχόμενο της πρώτης θέσης σε μια προσωρινή μεταβλητή. */
  89. v[pos1] = v[pos2]; /* Το περιεχόμενο της δεύτερης στην πρώτη θέση που πήρε. */
  90. v[pos2] = swap; /* Το περιεχόμενο της πρώτης στην δεύτερη θέση που πήρε. */
  91. }
  92.  
  93.  
  94. {                                      Visit:   http://g-lts.info/  for more code!                            }
Advertisement
Add Comment
Please, Sign In to add comment