Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012
3 5 1 Ταξινόμηση - Sorting Πίνακας Α 1 3 5 5 3 1 Ταξινόμηση (Φθίνουσα) Χωρίς Ταξινόμηση Ταξινόμηση (Αύξουσα)
Ταξινόμηση - Sorting Με την ταξινόμηση επιτυγχάνεται γρηγορότερη αναζήτηση στοιχείων σε πίνακες Υπάρχουν πολλοί αλγόριθμοι που ασχολούνται με την ταξινόμηση π.χ - Quick Sort - Insertion Sort - Shell Sort κ.τ.λ Εμείς θα δούμε σήμερα τους αλγόριθμους Bubble Sort & Quick Sort
Ταξινόμηση στοιχείων ενός πίνακα με τη μέθοδο της Φυσαλίδας - Bubble Sort A[1] A[2] A[3] A[] A[5] 12 18 50 2 Περιγραφή: Συγκρίνεται το στοιχείο της πρώτης θέσης με τα στοιχεία των επόμενων θέσεων. Αν είναι μεγαλύτερο ανταλλάζουν στοιχεία. Έτσι η πρώτη θέση θα καταλήξει να έχει το μικρότερο στοιχείο. Αυτό επαναλαμβάνεται με τα υπόλοιπα στοιχεία μέχρις ότου ταξινομηθούν τα δεδομένα όλων των θέσεων.
Bubble Sort A[1] A[2] A[3] A[] A[5] 12 18 50 2 12 2 12 18 50 12 18 temp 18 50 12 Βημα1 A[1] A[1] A[1] A[1] A[2] A[3] A[] A[5] IF A[1]>A[2] THEN BEGIN Βημα2 temp:=a[1]; Βημα3 A[2] A[3] A[1]:=A[2]; A[3] A[2] A[] A[2]:=temp; A[2] A[5] A[3] END; A[] A[5] Βημα A[] A[5]
Bubble Sort Καταληκτικά Ο αλγόριθμος αυτός είναι εύκολο να υλοποιηθεί, όμως για πίνακες με πολλά στοιχεία είναι πάρα πολύ αργός. Μια πολύ πιο γρήγορη ταξινόμηση προσφέρει ο αλγόριθμος Quick Sort ο οποίος είναι και η πιο συνηθισμένη μέθοδος ταξινόμησης. Ανήκει στην κατηγορία αλγορίθμων που λέγονται "Διαίρει και Βασίλευε", οι οποίοι μοιράζουν το πρόβλημα σε μικρότερα ανεξάρτητα υποπροβλήματα και τα λύνουν αναδρομικά.
Quick Sort Αλγόριθμος διάλεξε ένα κλειδί του πίνακα a[0..n 1] το οποίο θα είναι το στοιχείο διαμέρισης (pivot). Συνήθως επιλέγεται το στοιχείο το οποίο είναι κοντά στον μέσο όρο του μικρότερου και μεγαλύτερου στοιχείου στον πίνακα. έπειτα αναδιατάσσουμε τα στοιχεία του πίνακα a έτσι ώστε όλα τα κλειδιά που είναι μικρότερα του στοιχείου διαμέρισης να είναι στα αριστερά του και όλα τα μεγαλύτερα κλειδιά στα δεξιά του έπειτα ταξινομούμε αναδρομικά το αριστερό και το δεξιό μέρος του πίνακα
Quick Sort Αλλάζω τις τιμές του pivot με Up & Down ανάλογα με την θέση του Pivot και τις τιμές των Up & Down. Εδώ θα αλλαχθεί με το Down 12 5 33 23 3 55 12 12 55 33 5 Pivot First Up Up Down Last Βήματα Ορίζουμε το στοιχείο διαμερισμού ( Pivot) Down Προχωρώ στην πρώτη θέση από τα αριστερά που είναι μεγαλύτερη του pivot (up) και στην πρώτη θέση του πίνακα από δεξιά που είναι μικρότερη του pivot (down) Ελέγχω τις θέσεις up & down. Εάν το down είναι μικρότερο από το up τότε τις αλλάζω. Μετακινώ το Up προς τα δεξιά στη θέση που είναι >pivot και το Down προς τα αριστερά στην θέση < pivot. Επαναλαμβάνω τα πιο πάνω βήματα μέχρι οι δείκτες up & down να διασταυρωθούν
Quick Sort Pivot1 Pivot Pivot2 12 33 23 3 55 5 First1 Last1 First2 Last2 Παρατηρούμε ότι αριστερά του pivot οι αριθμοί είναι μικρότεροι του ενώ στα δεξιά είναι μεγαλύτεροι. Έχουν δηλαδή δημιουργηθεί δυο υποπίνακες στους οποίους θα ακολουθήσουμε τα ίδια βήματα για να μέχρι ο πίνακας να ταξινομηθεί. Ο αλγόριθμος είναι αναδρομικός και θα επαναλαμβάνεται εφόσον το First είναι μεγαλύτερο Last.
Παράδειγμα1 Να γίνει ταξινόμηση του πιο κάτω πίνακα σε αύξουσα σειρά χρησιμοποιώντας τους αλγόριθμους Bubble & Quick sort. Να δείξετε όλα τα βήματα. 20
Παράδειγμα 1 με Bubble Sort 20 Ελέγχουμε την κάθε θέση του πίνακα με τις υπόλοιπες Βήμα 1 >20 ΟΧΙ > ΝΑΙ ΑΛΛΑΓΗ > > ΟΧΙ ΟΧΙ ΤΕΛΟΣ ΓΙΑ ΘΕΣΗ 1 Βήμα 2 20 20 20 20> ΝΑΙ ΑΛΛΑΓΗ 20 > ΟΧΙ > ΟΧΙ ξεκινώντας από τα αριστερά. 20 ΤΕΛΟΣ ΓΙΑ ΘΕΣΗ 2 Βήμα 3 20 20> ΝΑΙ ΑΛΛΑΓΗ 20 > ΟΧΙ 20 ΤΕΛΟΣ ΓΙΑ ΘΕΣΗ 3 Βήμα 20> ΝΑΙ 20 ΑΛΛΑΓΗ 20 ΤΕΛΟΣ Πίνακας Ταξινομημένος
First Πίνακας Α Παράδειγμα 1 με Quick Sort 20 1. Ορίζουμε το Pivot= First F1 Πίν. Α1 F1 up down Last 20 up down down L1 Last Πίν. Α2 20 up F3 L3 F3=L3 up down L1 F L F=L F2 L2 F2=L2 2. Ορίζουμε σαν up τον πρώτο αριθμό μεγαλύτερο του Pivot στα αριστερά και Down τον μικρότερο του Pivot από δεξιά 3. Ελέγχουμε εάν το up >down τότε τα ανταλλάζω.. Επαναλαμβάνω το βήμα 2. Παρατηρώ ότι τα up & down έχουν διασταυρωθεί. Το Pivot θα ανταλλαχθεί με το Up 5. Έχουν δημιουργηθεί 2 υποπίνακες. Πίν. Α1 και Πιν. Α2.. Επαναλαμβάνουμε τα βήματα 1,2,3, για τον υποπίνακα Α1. Ο Πιν. Α2 δεν χρειάζεται γιατί εχει μόνο ένα στοιχείο. Για Πίν. Α1 το Pivot=. 20 Ο Πίνακας είναι ταξινομημένος
Ανακεφαλαίωση Ο αλγόριθμος Bubble Sort είναι πιο έυκολος στην υλοποίηση αλλά αργός ενώ ο Quick Sort δύσκολος στην υλοποίηση αλλά πολύ πιο γρήγορος για μεγάλους πίνακες. Στα παραδείγματα εφαρμόσαμε ταξινόμηση σε αύξουσα σειρά. Για να εφαρμόσουμε ταξινόμηση σε φθίνουσα σειρά αλλάζουμε τον έλεγχο που γίνετε στις θέσεις κάθε φορά από μεγαλύτερο σε μικρότερο δηλαδή να γίνετε αλλαγή στο Bubble Sort εάν Α[1] < Α[2] και στο Quick Sort να γίνετε αλλαγή εάν η θέση up < down.