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

Σχετικά έγγραφα
Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

Μεθόδων Επίλυσης Προβλημάτων

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Σημειώσεις δεύτερης εβδομάδας

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

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

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

ΗΥ-150. Ταξινόµηση και Αναζήτηση

Μεθόδων Επίλυσης Προβλημάτων

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

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

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

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

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

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Διάλεξη 9η: Πίνακες (arrays)

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό (με. τη C)

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

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

Ταξινόµηση και Αναζήτηση

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Θέματα Προγραμματισμού Η/Υ

Μεθόδων Επίλυσης Προβλημάτων

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

ΗΥ-150. Πίνακες (Arrays)

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Ηλεκτρονικοί Υπολογιστές

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Συναρτήσεις και Πίνακες

ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Οντοκεντρικός Προγραμματισμός

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΗΥ-150. Προγραμματισμός

Διάλεξη 11η: Δείκτες, μέρος 1

i : 0<=i<N-1 => data[i] <= data[i+1] 25/10/2009

Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων. 14. Πίνακες Ι. Ιωάννης Κατάκης. ΕΠΛ 032: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Η γλώσσα προγραμματισμού C

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία).

3 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΠΙΝΑΚΕΣ

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Η γλώσσα προγραμματισμού Strange

Μεθόδων Επίλυσης Προβλημάτων

17. Εισαγωγή σε αριθμητικές μεθόδους για μηχανικούς και αλγορίθμους

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

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

Παράδειγµα χρήσης πίνακα

Προγραμματισμός HY: Γλώσσα Προγραμματισμού C

Εχουμε ήδη συναντήσει μονοδιάστατους πίνακες, οι οποίοι ορίζονται ως εξής:

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

ΒΑΣΙΚΕΣ ΕΠΕΞΕΡΓΑΣΙΕΣ ΜΟΝΟΔΙΑΣΤΑΤΩΝ ΚΑΙ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ ΟΙ ΠΙΟ ΣΗΜΑΝΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ

Δομημένος Προγραμματισμός (ΤΛ1006)

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

C: Από τη Θεωρία στην Εφαρμογή

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

Transcript:

Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα ς Φυσαλίδας (Bubble Sort) Επιλογής (Selection Sort) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Πέρασμα Πίνακα σε Συνάρτηση Πέρασμα πίνακα Παράδειγμα: int my_array[]; my_function(my_array, ); Δίνουμε το όνομα του πίνακα (χωρίς [ ]) Συνήθως χρειάζεται να «περαστεί» και το μέγεθος του πίνακα Γίνεται «πέρασμα δια αναφοράς» (call by reference) Το όνομα του πίνακα είναι η διεύθυνση του πρώτου του στοιχείου Η συνάρτηση «γνωρίζει» που είναι αποθηκευμένος ο πίνακας Πέρασμα στοιχείων πίνακα Παράδειγμα: my_other_function(my_array[]); Δίνουμε το όνομα του στοιχείου Γίνεται «πέρασμα δια τιμής» (call by value) Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Πέρασμα Πίνακα σε Συνάρτηση Δήλωση (ή πρωτότυπο) συνάρτησης Παράδειγμα: void modify_array(int b[], int array_size); Τα ονόματα των παραμέτρων δεν είναι υποχρεωτικά στη δήλωση της συνάρτησης int b[] μπορεί να γραφεί απλά ως int [] int array_size μπορεί να γραφεί απλά ως int Επομένως, το παραπάνω παράδειγμα μπορεί να γραφεί ως: void modify_array(int [], int ); Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

/* Example program Πέρασμα Passing ολόκληρου arrays and πίνακα individual και στοιχείων array elements πίνακα to σε functions συναρτήσεις */ */ #include <stdio.h> #define SIZE Παράδειγμα void modifyarray( int [], int ); /* function prototypes */ void modifyelement( int ); 8 9 int main() int a[ SIZE ] =,,,,, i; printf( "Effects of passing entire array call " "by reference:\n\nthe values of the " Ολόκληροι πίνακες: "original array are:\n" ); * Πέρασμα δια αναφοράς * Μπορούν να τροποποιηθούν for ( i = ; i <= SIZE - ; i++ ) 8 printf( "%d", a[ i ] ); 9 printf( "\n" ); modifyarray( a, SIZE ); /* call by reference */ printf( "The values of the modified array are:\n" ); Μεμονωμένα στοιχεία πίνακα: * Πέρασμα δια τιμής for ( i = ; i <= SIZE - ; i++ ) * Δεν μπορούν να τροποποιηθούν printf( "%d", a[ i ] ); printf( "\n\n\neffects of passing array element call " 8 "by value:\n\nthe value of a[] is %d\n", a[ ] ); 9 modifyelement( a[ ] ); /* call by value */ printf( "The value of a[ ] is %d\n", a[ ] ); return ; Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. void modifyarray( int b[], int size ) /* function definition */ int j; 8 for ( j = ; j <= size - ; j++ ) 9 b[ j ] *= ; void modifyelement( int e ) /* function definition */ printf( "Value in modifyelement is %d\n", e *= ); Effects of passing entire array call by reference: The values of the original array are: The values of the modified array are: 8 Effects of passing array element call by value: output προγράμματος Παράδειγμα The value of a[] is Value in modifyelement is The value of a[] is Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Γραμμική Αναζήτηση Γενικά Απλός αλγόριθμος, χρήσιμος για μικρούς και μη ταξινομημένους πίνακες Παράδειγμα Να γραφεί πρόγραμμα που να ψάχνει έναν πίνακα ακεραίων στοιχείων (όνομα πίνακα: student_id) για να βρει σε ποια θέση του περιέχεται κάποια συγκεκριμένη τιμή (έστω η τιμή z) Αν η τιμή περιέχεται σε πολλές θέσεις του πίνακα, θέλουμε να βρίσκουμε μόνο την πρώτη από αυτές Το μέγεθος του πίνακα ορίζεται με τη σταθερά STUDENT_NUM Έξοδος προγράμματος Αν η συγκεκριμένη τιμή (z) υπάρχει σε κάποια θέση του πίνακα, τότε η θέση αυτή να ανατεθεί σε μια μεταβλητή (έστω i). Αν δεν υπάρχει, να ανατεθεί σε αυτήν η τιμή STUDENT_NUM int i; Αλγόριθμος επίλυσης προβλήματος... Για κάθε στοιχείο του πίνακα for (i=;i<student_num;++i) εάν είναι ίσο με z if (student_id[i]==z) break; Φύλαξε θέση Τερμάτισε την επανάληψη... Χειρότερη περίπτωση: εξέταση όλων των στοιχείων του πίνακα Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Γραμμική Αναζήτηση (χρήση συνάρτησης) Παράδειγμα Να γραφεί συνάρτηση που αναζητά μέσα σε έναν πίνακα ακεραίων στοιχείων id_table τον αριθμό μητρώου id. Το μέγεθος του πίνακα (αριθμός φοιτητών) περιέχεται στην παράμετρο size. Εάν βρεθεί ο αριθμός μητρώου που ψάχνουμε, να επιστραφεί η θέση του πίνακα που τον περιέχει. Αλλιώς, να επιστραφεί η τιμή του size. int location_of_student(int id_table[], int size, int id) int i; for(i=;i<size;++i) if (student_id[i]==id) return i; return size; Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.8

Αναζήτηση και ενημέρωση Παράδειγμα Έστω δύο παράλληλοι πίνακες (ίδιο μέγεθος) όπου αποθηκεύονται οι αριθμοί μητρώου και οι βαθμοί των φοιτητών για κάποιο μάθημα (έστω id_table και grade_table αντίστοιχα) Να γραφεί συνάρτηση που αναζητά μέσα στον πίνακα id_table κάποιον φοιτητή με αριθμό μητρώου id και στη συνέχεια ενημερώνει κατάλληλα τον πίνακα grade_table (μέσω κάποιας παραμέτρου new_grade) Το μέγεθος των πινάκων (αριθμός φοιτητών) περιέχεται στην παράμετρο size Αν η ενημέρωση είναι επιτυχής, να επιστρέφεται. Αλλιώς (αν δεν βρεθεί ο συγκεκριμένος αριθμός μητρώου), να επιστρέφεται η τιμή «-» Αναζήτηση και ενημέρωση int update_grade(int id_table[], float grade_table[], int size, int id, float new_grade) int location = location_of_student(id_table,size,id); if (location == size) return -; else grade_table[location]= new_grade; return ; Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.9 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Μέτρηση (χρήση const) Παράδειγμα Να γραφεί συνάρτηση που υπολογίζει τον αριθμό των φοιτητών που έχουν πάρει (σε κάποιο μάθημα) βαθμό από 8 και πάνω καθώς και τον αριθμό αυτών που έχουν αποτύχει (βαθμός μικρότερος του ) Οι βαθμοί είναι αποθηκευμένοι σε πίνακα μεγέθους size void grade_count(const int grade_table[], int size, int *above_eight, int *below_five) int i; *above_eight = *below_five = ; for(i=;i<size;++i) if (grade_table[i]>=8.) ++*above_eight; else if (grade_table[i]<) ++*below_five; Σημασία χρήσης της const δηλώνει ότι δεν μπορεί να γίνει ανάθεση σε κάποια μεταβλητή (read only) Θέματα ασφάλειας Ιδιαίτερα χρήσιμη για παραμέτρους Π.χ., στο grade_count απαγορεύει την τροποποίηση των περιεχομένων του grade_table Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Δυαδική αναζήτηση (binary search) Για ταξινομημένους πίνακες Σε αύξουσα ή φθίνουσα σειρά Συγκρίνει το μεσαίο στοιχείο ενός πίνακα (έστω middle) με το στοιχείο που ψάχνουμε (έστω key) Αν είναι ίσο, το στοιχείο βρέθηκε Αν key < middle, ψάχνει στο πρώτο μισό του πίνακα Αν key > middle, ψάχνει στο δεύτερο μισό του πίνακα Επανάληψη Πολύ γρήγορος αλγόριθμος Το πολύ N βήματα, όπου N > (αριθμός στοιχείων πίνακα) Παράδειγμα: για πίνακα στοιχείων χρειάζονται το πολύ βήματα ( > ) Μεσαίο στοιχείο πίνακα Περιττό και άρτιο πλήθος στοιχείων Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

Δυαδική αναζήτηση Πρώτο παράδειγμα: Αναζήτηση 9 Πρώτο βήμα Δυαδική αναζήτηση Πρώτο παράδειγμα: Αναζήτηση 9 Δεύτερο βήμα - 9-9 min pos max min pos max Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Δυαδική αναζήτηση Πρώτο παράδειγμα: Αναζήτηση 9 Τρίτο βήμα Δυαδική αναζήτηση Δεύτερο παράδειγμα: Αναζήτηση Πρώτο βήμα - 9-9 min pos max min pos max Το στοιχείο βρέθηκε!!! Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

Δυαδική αναζήτηση Δεύτερο παράδειγμα: Αναζήτηση Δεύτερο βήμα Δυαδική αναζήτηση Δεύτερο παράδειγμα: Αναζήτηση Τρίτο βήμα - 9-9 min pos max min pos max Το στοιχείο δεν υπάρχει!!! Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.8 Κώδικας Δυαδική αναζήτηση int binary_search(const int table[], int size, int item) int min =, max = size, pos= (min + max)/; while(min <= max) if (item > table[pos]) min = pos + ; else if (item < table[pos]) max = pos ; else /* βρέθηκε */ return pos; pos = (min + max) / ; return -; Γενικά Πολύ σπουδαία διεργασία Αύξουσα ή φθίνουσα σειρά φυσαλίδας (bubble sort) Σύγκριση διαδοχικών ζευγαριών στοιχείων ενός πίνακα Αν είναι στην επιθυμητή σειρά, καμία αλλαγή Αν όχι, αντίστρεψε τη σειρά τους (ενάλλαξε τα περιεχόμενά τους) Επανάληψη Αλγόριθμος bubble sort Απαιτεί διπλό βρόχο Σειρά ταξινόμησης ως παράμετρος Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.9 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

- - - - φυσαλίδας - φυσαλίδας - - - - Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. - Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. - - - - φυσαλίδας - φυσαλίδας - - - - Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. - Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

- φυσαλίδας Παρατηρήσεις στον αλγόριθμο φυσαλίδας - - Κάθε προσπέλαση καθορίζει τη θέση ενός τουλάχιστο στοιχείου Η πρώτη προσπέλαση καθορίζει το μεγαλύτερο στοιχείο Η δεύτερη το αμέσως μικρότερο κ.ο.κ. Ο αριθμός των στοιχείων που εξετάζονται μετά από κάθε προσπέλαση μειώνεται κατά ένα Γιατί; - - Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Ταξινομημένο!!! Τερματισμός αλγορίθμου (ταξινόμηση στοιχείων) Εάν σε μια προσπέλαση δεν γίνει καμία εναλλαγή στοιχείων Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. - - φυσαλίδας με μείωση του αριθμού στοιχείων που εξετάζονται - - φυσαλίδας με μείωση του αριθμού στοιχείων που εξετάζονται - - - - - Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.8

- - φυσαλίδας με μείωση του αριθμού στοιχείων που εξετάζονται - - φυσαλίδας με μείωση του αριθμού στοιχείων που εξετάζονται - Ταξινομημένο!!! Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.9 Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Κώδικας φυσαλίδας void bubble_sort(int table[], int size) int pass, j, hold; for ( pass = ; pass <= size - ; pass++ ) for ( j = ; j <= size - ; j++ ) if ( table[j] > table[j+] ) hold = table[j]; table[j] = table[j+]; table[j+] = hold; Κώδικας φυσαλίδας void bubble_sort(int table[], int size) int sorted, len = size, k; do sorted = ; /* έστω ότι ο πίνακας είναι ταξινομημένος */ for (k = ; k < len; k++) if (table[k]<table[k+]) swap(&table[k],&table[k+]); sorted = ; len; while (!sorted && len > ); Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

φυσαλίδας φυσαλίδας Κώδικας Για καθορισμό αύξουσας η φθίνουσας σειράς Κώδικας void bubble_sort(int compare(int,int), int table[], int size) int sorted, len = size, k; do sorted = ; /* έστω ότι ο πίνακας είναι ταξινομημένος */ for (k = ; k < len; k++) if (compare(table[k],table[k+])) swap(&table[k],&table[k+]); sorted = ; len; while (!sorted && len > ); int less(int x, int y) return x < y; int greater(int x, int y) return x > y; #define SIZE int main () int table[size] = 9,,,,; bubble_sort(less, table, ); display_table(table,size); bubble_sort(greater, table,); display_table(table,size); Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. επιλογής επιλογής Βασική ιδέα Σε έναν πίνακα στοιχείων, βρες το μεγαλύτερο στοιχείο του και κάνε εναλλαγή θέσεων (swap) αυτού με το τελευταίο στοιχείο του πίνακα Το αποτέλεσμα είναι μια μη ταξινομημένη λίστα της οποίας το μέγεθος είναι κατά μικρότερο από το μέγεθος της αρχικής λίστας, η οποία ακολουθείται από μια «ταξινομημένη» λίστα μεγέθους Επανάληψη του παραπάνω βήματος για τη μη ταξινομημένη λίστα έχει ως αποτέλεσμα μια μη ταξινομημένη λίστα της οποίας το μέγεθος είναι κατά μικρότερο από το μέγεθος της αρχικής, η οποία ακολουθείται από μια ταξινομημένη λίστα μεγέθους κ.ο.κ Τερματισμός αλγορίθμου (ταξινόμηση στοιχείων) Όταν το μέγεθος της μη ταξινομημένης λίστας γίνει Πέρασμα Πέρασμα Πέρασμα Πέρασμα [] [] [] [] [] Βρες το μεγαλύτερο των πρώτων πέντε στοιχείων και κάνε το εναλλαγή με το στοιχείο array[] Βρες το μεγαλύτερο των πρώτων τεσσάρων στοιχείων και κάνε το εναλλαγή με το στοιχείο array[] Βρες το μεγαλύτερο των πρώτων τριών στοιχείων και κάνε το εναλλαγή με το στοιχείο array[] Βρες το μεγαλύτερο των πρώτων δύο στοιχείων και κάνε το εναλλαγή με το στοιχείο array[] Ταξινομημένο!!! Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8. Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.

Κώδικας επιλογής void selection_sort(int size, int table[]) int i; int index_of_largest, last, temp; for (last = size-; last >= ; last--) index_of_largest = ; for (i = ; i <= last; i++) if (table[i] > table[index_of_largest]) index_of_largest = i; /* end if */ /* end for */ temp = table[last]; table[last] = table[index_of_largest]; table[index_of_largest] = temp; Προγραμματισμός Η/Υ Διδάσκων: Νίκος Καρακαπιλίδης 8.