int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

Σχετικά έγγραφα
p

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Τεχνικές και Αλγόριθμοι Ταξινόμησης

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Ταξινόµηση. Παύλος Εφραιµίδης. οµές εδοµένων και

Αλγόριθμοι Ταξινόμησης Μέρος 1

Προγραμματισμός Ι (ΗΥ120)

Ταξινόμηση. Σαλτογιάννη Αθανασία

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

ιαφάνειες παρουσίασης #4

Αλγόριθμοι ταξινόμησης

Ουρά Προτεραιότητας (priority queue)

Εργαστηριακή Άσκηση 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Προγραμματιστικές Τεχνικές

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Δομές Δεδομένων και Αλγόριθμοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

Συγκρίσιμα Αντικείμενα (comparable)

Προγραµµατιστικές Τεχνικές

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Προχωρημένες έννοιες προγραμματισμού σε C

242 -ΕισαγωγήστουςΗ/Υ

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

Πληροφορική 2. Αλγόριθμοι

Δείκτες & Πίνακες Δείκτες, Πίνακες

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Διαδικασιακός Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 29/11/07

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Σημειωματάριο Δευτέρας 13 Νοε. 2017

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 4/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Αντικειμενοστρεφής Προγραμματισμός

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 8/11/07

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

Δομές Δεδομένων και Αλγόριθμοι

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Εργαστήριο 2: Πίνακες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

Βασικά της γλώσσας JAVA

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΕΠΛ131 Αρχές Προγραμματισμού

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

public class ArrayStack implements Stack {

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

Διάλεξη 04: Παραδείγματα Ανάλυσης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Σχεδίαση και Ανάλυση Αλγορίθμων

Δομζσ Δεδομζνων. Αναηιτθςθ και Ταξινόμθςθ Διάλεξθ 3

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

Transcript:

ΤΑΞΙΝΟΜΗΣΗ- ΑΣΚΗΣΕΙΣ Οι μέθοδοι ταξινόμησης INSERTION, SELECTION και BUBBLE SORT με την ολοκλήρωσή τους θα έχουν σε κάθε θέση του πίνακα το σωστό στοιχείο x (ταξινόμηση με αύξουσα σειρά δηλ. στην θέση 0 του πίνακα το μικρότερο στοιχείο, στην 1 η το αμέσως επόμενο ) Έστω ένας πίνακας n=7 θέσεων µη ταξινοµηµένος int Α[] = {; { 4, 9, 10, 12, 15, 16, 22 Ταξινοµηµένος 1. Insertion sort - ταξινόµηση µε εισαγωγή Ενώ αρχικά Α[0]=4, Α[1]=16, Α[2]=22 µε το πέρας της ταξινόµησης θα έχω Α[0]=4, Α[1]=9, Α[2]=10 Η µέθοδος διατρέχει τον πίνακα, παίρνει κάθε στοιχείο x του πίνακα και θεωρώντας τον πίνακα ταξινοµηµένο µέχρι αριστερά του x, το τοποθετεί «σωστά», σπρώχνοντας τα µεγαλύτερα του δεξιά { 4, 16,22, 12, 9, 15, 10 Ετσι π.χ. αν το x=12, αριστερά από το x ο πίνακας θεωρείται ταξινοµηµένος (4, 16,22) και πρέπει εκεί να εισαχθεί «σωστά» το x σπρώχνοντας τα µεγαλύτερα 16,22 δεξιά Συνεχίζει µε x=9 κτλ. Ξεκινώντας µε A[1]=16, (ξεκινά θεωρώντας το Α[0] στην σωστή θέση 1 ) έχουµε τα εξής περάσµατα: 4 16 22 12 9 15 10 i=1 4 16 22 12 9 15 10 i=2 4 16 22 12 9 15 10 i=3 4 12 16 22 9 15 10 i=4 4 9 12 16 22 15 10 i=5 4 9 12 15 16 22 10 Ι=6 4 9 10 12 15 16 22 Tαξινοµήστε σε αύξουσα σειρά τον πίνακα µε τις µεθόδους: ταξινόµηση µε εισαγωγή (insertion sort), ταξινόµηση µε επιλογή (selection sort), bubble sort, ταξινόµηση µε συγχώνευση (merge sort) εµφανίζοντας τους αριθµούς µετά από κάθε πέρασµα χωρίς κώδικα. { 4, 12, 16, 22, 9, 15,16, 22 Προγραµµατιστικά χρειαζόµαστε 2 loop, ένα για το δείκτη i του x, από το 1 έως το 6 (length-1) που διατρέχει τον πίνακα ώστε να συµπεριλάβει όλα τα στοιχεία x for (int i=1; i < A.length; i++) ένα για το δείκτη j από το i έως τo 0, που διατρέχει αριστερά το πίνακα ώστε να τοποθετήσει αριστερά «σωστά» το στοιχείο x j=i; while ( j>0 ) j--; 1 Aν ο πίνακας έχει µόνο ένα στοιχείο δεν χρειάζεται sorting. [1]

Ολες οι µέθοδοι ταξινόµησης δέχονται σαν όρισµα τον πίνακα, τον ταξινοµούν και δεν επιστρέφουν τίποτα. i 1 2 3 4 5 6 1. Insertion sort - ταξινόµηση µε εισαγωγή 2 j Ξεκινώ µε x Α[1]=16 και j=1 public static void InsertSort (int[] A) { int x; int j; for (int i=1; i < A.length; i++) { public static void showpinaka(int A[]){ for (int i=0 ; i<a.length; i++) System.out.print( "A("+i+")="+A[i]+" " ); System.out.println(); int numbers[] = {4,16,22,12,9,15,10; showpinaka(numbers) ; sort.insertsort(numbers); showpinaka(numbers) ; // Main.java //i=1,2,3,4,5,6 x = A[i]; j=i; // σπρώχνω τα µεγαλύτερα δεξιά while (j>0 && A[j-1] >x ) { //j=i,i-1,i-2, A[j] = A[j-1]; j--; A[j]=x; // Sort.java Αρχικά θεωρώ ότι το 1 ο στοιχείο A[0]=4 βρίσκεται στη σωστή θέση. i =1, ξεκινώ µε το 2 ο στοιχείο x=16 A[1]=16 ελέγχω τη θέση του (σωστή αριστερά) δείκτης j=1 Ελέγχω αν 4>16 δηλ. και j>0 αν το προηγούµενο από το x στοιχείο είναι µεγαλύτερο του, που δεν ΕΙΝΑΙ, δηλ. είµαι ΟΚ ταξινοµηµένο αριστερά, δεν µπαίνει στο while, Α[1]=16 ----------------------------------------------------- 2 η προσπάθεια i=2, συνεχίζω µε το 3 ο στοιχείο x=22 A[2]=22 ελέγχω τη θέση του (σωστή αριστερά) δείκτης j=2 Ελέγχω αν 16>22 που δεν ΕΙΝΑΙ, άρα δεν µπαίνει στο while ) Α[2]=22 ------------------------- 3 η προσπάθεια i=3, τώρα x=12 μιας και A[3]=12 δείκτης j=3 Ελέγχω αν 22>12 που ΕΙΝΑΙ και µπαίνει στο while για να σπρώξει τα µεγαλύτερα του 12 δεξιά (αρχικά το 22 µετά το 16) Α[3]=Α[2]=22 4, 16, 22, 22, 9, j-- j=2 και ελέγχω πάλι αν 16>12 και το A[1]=16 ΕΙΝΑΙ µεγαλύτερο από το 12 άρα Α[2]=Α[1]=16 4, 16, 16, 22, 9, j-- j=1 και ελέγχω πάλι αν 4>12 που δεν ΕΙΝΑΙ, άρα βγαίνει από το while Α[1]=12 ---------------------- 4, 12, 16, 22, 9, 15, 10 4 η προσπάθεια 2 Aν ο πίνακας έχει µόνο ένα στοιχείο δεν χρειάζεται sorting. [2]

2. Selection Sort - ταξινόµηση µε επιλογή Η ταξινόµηση µε επιλογή διατρέχει τον πίνακα, παίρνει κάθε στοιχείο x του πίνακα και το τοποθετεί στην σωστή τελική και ταξινοµηµένη του θέση (επιλέγοντας την τιµή η οποία θα πρέπει να πάει σε κάθε θέση επιλέγει την µικρότερη κάθε φορά). Αρχικά βρίσκει το µικρότερο στοιχείο του πίνακα x=4 και το ανταλλάσσει µε την τιµή στην πρώτη θέση του πίνακα (βαζοντάς το x στην θέση 0). Κατόπιν από τα υπόλοιπα στοιχεία ξαναβρίσκει το µικρότερο τους x=9, και το ανταλλάζει µε την δεύτερη θέση του πίνακα δηλ. το βάζει στην θέση 1, ενώ στην θέση που ήταν το x, βάζει το στοιχείο που ήταν στην θέση 1 (swap values) κ.ο.κ. Έχουµε λοιπόν τα εξής περάσµατα: i=0 4 16 22 12 9 15 10 i=1 4 9 22 12 16 15 10 i=2 4 9 10 12 16 15 22 i=3 4 9 10 12 16 15 22 i=4 4 9 10 12 15 16 22 i=5 4 9 10 12 15 16 22 Προγραµµατιστικά χρειαζόµαστε 2 loop, ένα µε δείκτη i που διατρέχει τον πίνακα ώστε να συµπεριλάβει όλα τα στοιχεία x for (int i=1; i < A.length-1; i++) ένα µε δείκτη j που διατρέχει τον πίνακα από το i και µετά ώστε να βρεί από τα υπόλοιπα την µικρότερη τιµή και να κάνει την ανταλλαγή for (int j=i+1; j<a.length; j++) i public static void SelectionSort (int[] A) { int indexmin, min; //i=1,2,3,4,5 for (int i = 0; i < A.length-1; i++) { indexmin=i; for (int j=i+1; j<a.length; j++) if (A[j] < A[indexmin]) indexmin=j; //swap the values min = A[indexmin]; A[indexmin] = A[i]; A[i] = min; // Sort.java int number[] = {4,16,22,12,9,15,10; showpinaka(number) ; sort.selectionsort number); showpinaka(number) ; // Main.java [3] ------------------------ 1 η προσπάθεια i=0 indexmin=0 j=1,2,, 6 Eλέγχω αν A[1]<A[0] δεν είναι για κανένα j min=a[0] ανταλλαγή τιμών Α[0] με A[0]=A[0] A[0]=min ---------------------------- 2 η προσπάθεια i =1 indexmin=1 j=2 6 Α[indexmin] Eλέγχω αν A[2]< A[1] Α[6]< A[1] Είναι για j=4 άρα indexmin=4 min=a[4] ανταλλαγή τιμών Α[1] με Α[4] A[4]=A[1] A[1]=min -------------------------- 3 η προσπάθεια i =2 indexmin=2 4, 9, 22, 12, 16, 15, 10

3. Bubble Sort ταξινόµηση φυσαλίδας Ο αλγόριθµος ταξινόµησης bubble sort συγκρίνει κάθε στοιχείο x στην θέση j µε το επόµενό του στην θέση j+1, ξεκινώντας από την µία άκρη του πίνακα µέχρι την άλλη. Μιά µεταβλητή flag σηµατοδοτεί εάν ο πίνακας είναι ταξινοµηµένος ή όχι, που πριν από κάθε πέρασµα του πίνακα την αρχικοποιούµε σε true. Αν κατά την σύγκριση δύο τιµών χρειαστεί να ανταλλαχθούν τότε αλλάζουµε και την τιµή της µεταβλητής σε false. Αν η µεταβλητή διατηρεί την τιµή true, σηµαίνει ότι δεν έχει γίνει κάποια ανταλλαγή τιµών, εποµένως ο πίνακας είναι ταξινοµηµένος και δεν χρειάζεται να γίνει άλλο «πέρασµα». j 4 16 22 12 9 15 10 i=1 4 16 12 9 15 10 22 i=2 4 12 9 15 10 16 22 i=3 4 9 12 10 15 16 22 i=4 4 9 10 12 15 16 22 i=5 4 9 10 12 15 16 22 Εξασφαλίζεται έτσι ότι µε το 1 ο πέρασµα η µεγαλύτερη τιµή θα προχωρήσει στην τελευταία θέση. Στο 5 ο πέρασµα ο πίνακάς µας ταξινοµείται Γενικά για να ταξινοµηθεί ο πίνακας χρειάζονται Ν-1 «περάσµατα» του πίνακα, όπου Ν το πλήθος των στοιχείων. Προγραµµατιστικά χρειαζόµαστε πάλι 2 loop. Ένα για τα περάσµατα και ένα για τους ελέγχους των διαδοχικών x. public static void BubbleSort (int[] A) { int i, j; int temp; boolean flag; for (i=1; i < A.length; i++) { //Τα περάσµατα flag=true; for (j=0; j < A.length-i; j++) if (A[j] > A[j+1]) { temp=a[j]; A[j]= A[j+1]; A[j+1]=temp; ; if (flag) return; // Sort.java int nums[] = {4,16,22,12,9,15,10; showpinaka(nums) ; sort.bubblesort nums); showpinaka(nums) ; // Main.java Αν η µεταβλητή flag αλλάξει τιµή, σηµαίνει ότι κάποιες τιµές έχουν αλλάξει θέση, εποµένως ο πίνακας δεν είναι ταξινοµηµένος και χρειάζεται να γίνει και άλλο «πέρασµα». [4] 1 η προσπάθεια i=1 ο πέρασμα flag=true j=0,1,,5 j=0 : Eλέγχω αν A[0]>A[1] - δεν είναι j=1 : Eλέγχω αν A[1]>A[2] - δεν είναι j=2 :Eλέγχω αν A[2]>A[3] - Είναι temp=a[2]=22 //swap Α[2],Α[3] A[2]=A[3] A[3]=temp j=3:eλέγχω αν A[3]>A[4] Είναι temp=a[3]=22 //swap Α[3],Α[4] A[3]=A[4] A[4]=temp j=4:eλέγχω αν A[4]>A[5] Είναι temp=a[4]=22 //swap Α[4],Α[5] A[4]=A[5] A[5]=temp j=5:eλέγχω αν A[5]>A[6] ] Είναι temp=a[5]=22 A[5]=A[6] A[6]=temp 4,16, 12,22, 9,15,10 4,16,12, 9,22, 15,10 4,16,12, 9,15,22, 10 //swap Α[4],Α[5] και αφού η flag δεν είναι true προχωρώ στο 2ο πέρασμα με i=2 1 η προ i=1 flag=t

Εφαρµογή για ταξινόµηση φοιτητή µε ΑΜ, Επώνυµο & Έτος Εισαγωγής public class MyUtils { //public static void InsertSort (int[] A) { public static void insertsortam (int[] A) { // //public static void SelectionSort (int[] A) { public static void selectsorteponymo (int[] A){ // //public static void BubbleSort (int[] A) { public static void bubblesortee (int[] A){ // //ΜyUtils.java public class UserInput {// η κλάση που σας δίνεται public static String getstring(){ // public static int getshort() { // //UserInput.java Θα πρέπει να βάλετε τις επιθυµητές παραµέτρους και να συµπληρώσετε/διορθώσετε αναλόγως την µέθοδο. Μην ξεχνάτε ότι στην εφαρµογή σας ο πίνακας δηµιουργείται ΣΤΑ ΙΑΚΑ!! (αυτό σηµαίνει ότι το πραγµατικό µέγεθός του µεταβάλλεται... ) public class foititis { private String name; private String surname; private int am; private int registyear; public foititis(string name, String surname){ //δοµητής public void setarmitroou(short x){ public void setetoseisagwgis(short x){ //..και ότι άλλο χρειάζεται //foititis.java public class TestMyUtils { foititis[] f = new foititis[7]; f[0]=new foititis("vassi","koubi",(short)5,(short)2010); // insertsortam // selectsorteponymo.. // bubblesortee.. // TestMyUtils.java Προσοχή π.χ. θα ταξινοµείται το ΑΜ, αλλά όχι αλλάζοντας τα ΑΜ αλλά τα αντικείµενα ( δηλ. δεν θα πρέπει να δώσετε σε ένα φοιτητή ΑΜ που ανήκει σε κάποιον άλλον) Θα χρειαστείτε και την compareto ( ελέγχει αν 2 Strings είναι lexicographically equal, precedes or follows each other). if (f[i].getsurname().compareto(f[j].getsurname())<0) [5]