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



Σχετικά έγγραφα
Πληροφορική 2. Αλγόριθμοι

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

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

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον δομημένο προγραμματισμό

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

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

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

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

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

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

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

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

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

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

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

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

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

Συµβολοσειρές - Strings

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

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

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

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

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

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

Εργαστήριο 3 Εντολή for while, do while

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

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

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

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

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

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

p

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Να δοθεί Πρόγραμμα το οποίο να αντιστρέφει τα στοιχεία ενός πίνακα π.χ. το Α[1] να πηγαίνει στο Α[12] κ.ο.κ χρησιμοποιώντας αυτόν τον πίνακα

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Αλγόριθµοι Αναζήτησης και Ταξινόµησης

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 8 Ασκήσεις Πινάκων Ταξινόμηση Αναζήτηση. Γιώργος Λαμπρινίδης

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 }

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

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Να δοθεί Πρόγραμμα το οποίο να αντιστρέφει τα στοιχεία ενός πίνακα π.χ. το Α[1] να πηγαίνει στο Α[12] κ.ο.κ χρησιμοποιώντας αυτόν τον πίνακα

Πίνακες (Arrays) Εισαγωγή στη C++

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

6. Αφού δημιουργήσετε ένα πίνακα 50 θέσεων με ονόματα μαθητών να τον ταξινομήσετε αλφαβητικά με την μέθοδο της φυσαλίδας

Πρόβληµα : Πώς θα λύναµε αυτό το πρόβληµα αν είχαµε µόνο χαρτί και µολύβι, και κάποιος µας έλεγε τους αριθµούς προφορικά?

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

Ταξινόμηση με συγχώνευση Merge Sort

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

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

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

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

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

ΠΙ Ν Α Κ Ε Σ (arrays)

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5

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

Το πρόγραμμα θα τυπώνει και τους τρεις πίνακες.

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

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

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

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

Αλγόριθμοι Αναζήτησης. (AeppAcademy.com)

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

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

Αλγόριθµοι και Πολυπλοκότητα

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

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

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

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

ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α Α1. 1 ΣΩΣΤΟ 2 ΛΑΘΟΣ 3 ΛΑΘΟΣ 4 ΛΑΘΟΣ 5 ΣΩΣΤΟ

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

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

Προγραμματισμός Υπολογιστών με C++

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

Χωρική Βάση δεδοµένων Autocad

Ταξινόμηση. Ταξινόμηση ευθείας ανταλλαγής (Φυσαλίδα) 1) Να ταξινομηθεί ο πίνακας Α[Ν] σε αύξουσα σειρά με τη μέθοδο της φυσαλίδας.

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

Transcript:

1 242 -ΕισαγωγήστουςΗ/Υ ΤµήµαΜαθηµατικών, Πανεπιστήµιο Ιωαννίνων Άρτια Α.Μ. (0-2-4-6-8)

2 ήλωση: Πίνακες στην ΕΑΓ δηλωση ( <ονοµα> [1 : 1, 1 : 2,..., 1: ν ] ) παραταξη <τύποςµεταβλητής> ; Π.χ.: δηλωση (A[1:20]) παραταξη ακερ; δηλωση (Β[1:2, 1:10]) παραταξηακερ; Προσπέλαση: <ονοµα> [ δ1, δ2,..., δν] Π.χ.: A[5] B[2, 10] B[I,J] Τι τύποι είναι πάντα οι δείκτες (δ1,δ2,..., δν);

Πίνακες στη C++ ήλωση: <τύπος µεταβλητής> <ονοµα> [ 1][ 2]...[ ν]; 3 Π.χ.: int A[10], C[6]; float B[5][5], D[2][10]; Προσοχή: Η αρίθµηση ξεκινάει πάντα από το 0 int A[N] Α[0], Α[1],..., Α[Ν-1] int A[4] Α[0], Α[1], Α[2], Α[3] Προσπέλαση: <ονοµα> [δ1] [δ2]... [δν] Π.χ.: A[0] B[0][10] B[I][J]

Παράδειγµα διάβασµα-εκτύπωση Πίνακα 4 Θέλουµε να καταχωρήσουµε 10 ακέραιες τιµές σε έναν πίνακα διαβάζοντας τις τιµές από το πληκτρολόγιο και στη συνέχεια θέλουµε να εκτυπώσουµε τις τιµές του πίνακα

5 διαδικασια ΠΑΡΑ ΕΙΓΜΑ δηλωση (Ι) ακερ; δηλωση (ΠΙΝ (1:10) ) παραταξη ακερ; αρχη για I 1εως 10 επαναλαβε ( ) διαβασεπιν(ι); int main() int I, A[10]; for (I=0; I<10; I++) cin >> A[I]; για I 1εως 10 επαναλαβε ( ) τυπωσε ΠΙΝ(Ι); for (I=0; I<10; I++) cout << A[I]; τελος ΠΑΡΑ ΕΙΓΜΑ

6 #include <iostream.h> main() int I, A[10]; for (I=0; I<10; I++) cin >> A[I]; for (I=0; I<10; I++) cout << A[I];

7 ιάταξηακολουθίας Θα ασχοληθούµε µε αλγορίθµους που διατάσουν µια ακολουθία σε φθίνουσα ή αύξουσα τάξη (αλγόριθµοι ταξινόµησης) Θεωρούµε ότι Χ[100] ακέραια στοιχεία Θέλουµε να διατάξουµε τα στοιχεία του Χ έτσι ώστε (αύξουσα τάξη): Χ[1] Χ[2]... Χ[99] Χ[100]

8 Αλγόριθµοι Ταξινόµησης Θα εξετάσουµε διάφορους αλγορίθµους που επιλύουν ίδια προβλήµατα. Όταν σχεδιάζουµε έναν αλγόριθµο µας ενδιαφέρει η αποτελεσµατικότητά του (ταχύτητα) Ταξινόµηση δεδοµένων Σκοπός: Χ[1] Χ[2]... Χ[99] Χ[100] Πολύ σπουδαία εφαρµογή Σχεδόν κάθε οργανισµός πρέπει να ταξινοµεί κάποια δεδοµένα Συνήθως οι επιχειρήσεις πρέπει να ταξινοµούν ή να κρατάνε ταξινοµηµένα µεγάλο όγκο δεδοµένων Ταξινοµούµε ένα πίνακα µε n (=100) στοιχεία

9 Αλγόριθµοι Ταξινόµησης ΑλγόριθµοςΕπιλογής (Selection Sort) Μέθοδος ανταλλαγής των µεγίστων στοιχείων Απλός και εύκολος στην υλοποίηση Αργός Αλγόριθµος Φυσαλίδας (Bubble Sort) Μέθοδος προώθησης µεγάλων τιµών Απλός και εύκολος στην υλοποίηση Αργός ΑλγόριθµοςΣυγχώνευσης (Merge Sort) Μας δίνονται δύο ήδη ταξινοµηµένοι πίνακες και ζητάµε την συγχώνευσή τους σε έναν ταξινοµηµένο πίνακα Γρήγορος αλλά πιο πολύπλοκος στην υλοποίηση

Ανταλλαγή Στοιχείων 10 Ανταλλαγή (swap) των τιµών που αποθηκεύονται στις µεταβλητές x και y. Πρέπει να χρησιµοποιήσουµε µια νέα βοηθητική µεταβλητή. int temp; x y temp = x; x = y; y = temp; x temp y

Αλγόριθµος Επιλογής - Selection Sort (µε ανταλλαγή µεγίστων) 11 Μέθοδος ανταλλαγής των µεγίστων στοιχείων 1. Προσδιορισµός στοιχείου που έχει την µέγιστη τιµή από τα Ν(=100) στοιχεία 2. Ανταλλαγή µε το Ν-στό στοιχείο της (υπό)- ακολουθίας 3. Επανάληψητων βηµάτων 1-2 µετα υπόλοιπα Ν-1 στοιχεία. ηλαδή, για την - υποακολουθία των πρώτων Ν-1 στοιχείων - υποακολουθία των πρώτων Ν-2 στοιχείων -... - υποακολουθία των πρώτων 2 στοιχείων

12 Αλγόριθµος Επιλογής Παράδειγµα Πέρασµα 1 Πέρασµα 2 Πέρασµα 3 Πέρασµα 4 Αρχικός πίνακας: 6 5 2 4 3 Εύρεση: 6 5 2 4 3 Ανταλλαγή: 3 5 2 4 6 Εύρεση: 3 5 2 4 6 Ανταλλαγή: 3 4 2 5 6 Εύρεση: 3 4 2 5 6 Ανταλλαγή: 3 2 4 5 6 Εύρεση: 3 2 4 5 6 Ανταλλαγή: 2 3 4 5 6

διαδικασια ΤΑΞ_ΕΠΙΛΟΓΗ δηλωση (Ι, Κ, Μ, Π, ΜΕΓ) ακερ; δηλωση ( Χ [1:100] ) παραταξηακερ; αρχη Κ 100; εφοσον Κ > 1επαναλαβε ( ) ΜΕΓ Χ[1] ; Μ 1; για Ι 2 εως Κεπαναλαβε ( εαν Χ[Ι] > ΜΕΓ ) τοτε ( ΜΕΓ Χ[Ι]; Μ Ι; ) Π Χ[Μ]; Χ[Μ] Χ[Κ]; Χ[Κ] Π; Κ Κ-1; τελος ΤΑΞ_ΕΠΙΛΟΓΗ είκτης που δηλώνει την υποακολουθία Εύρεση Μεγίστου Ανταλλαγή στοιχείων 13

int I, X[100], K, MAX, PMAX, temp; 14 K = 99; while( K > 0) MAX = X[0]; PMAX = 0; for(i=1; I <= K; I++) if( X[I] > MAX) MAX = X[I]; PMAX = I; temp = X[PMAX]; X[PMAX] = X[K]; X[K] = temp; K = K 1; είκτης που δηλώνει την υποακολουθία (θέση του τελευταίου στοιχείου) Εύρεση Μεγίστου Ανταλλαγή στοιχείων

Αλγόριθµος Επιλογής - Selection Sort (µε ανταλλαγή ελαχίστων) 15 Μέθοδος ανταλλαγής των ελαχίστων στοιχείων 1. Προσδιορισµός στοιχείου που έχει την ελάχιστη τιµή από τα Ν(=100) στοιχεία 2. Ανταλλαγή µε το 1-στό στοιχείο της (υπό)- ακολουθίας 3. Επανάληψητων βηµάτων 1-2 µετα υπόλοιπα Ν-1 στοιχεία. ηλαδή, για την -υποακολουθία των τελευταίων Ν-1 στοιχείων - υποακολουθία των τελευταίων Ν-2 στοιχείων -... - υποακολουθία των τελευταίων 2 στοιχείων

Αλγόριθµος Φυσαλίδας (Bubble Sort) 16 Προωθεί τιςµεγάλες τιµέςπροςτα δεξιά, συγκρίνοντας κάθε στοιχείο µε το επόµενό του ηλαδή ελέγχει το Χ[Ι] µε το Χ[Ι+1] Εάν Χ[Ι] > Χ[Ι+1] τότε ανταλλάσουµε τα δύο στοιχεία. Εάν η διαδικασία επαναληφθεί για τα Ν-1 στοιχεία τότε το µέγιστο πηγαίνει στην θέση Ν. Συνεχίζοντας για τα υπόλοιπα Ν-1 στοιχεία (το µέγιστο έχει τοποθετηθεί σωστά) επιτυγχάνουµε την ταξινόµηση.

Αλγόριθµος Φυσαλίδας (Bubble Sort) 17 Παράδειγµα Αρχικός πίνακας: 3 4 2 6 7 Πέρασµα 1: 3 4 2 6 7 Πέρασµα 1: 3 2 4 6 7 Πέρασµα 1: 3 2 4 6 7 Πέρασµα 1: 3 2 4 6 7 Πέρασµα 2: 2 3 4 6 7 Πέρασµα 2: 2 3 4 6 7 Πέρασµα 2: 2 3 4 6 7 Πέρασµα 3: 2 3 4 6 7 Πέρασµα 3: 2 3 4 6 7

διαδικασια ΤΑΞ_ΦΥΣΑΛ δηλωση (Ι, Κ, Π, ΜΕΓ) ακερ; δηλωση ( Χ [1:100] ) παραταξηακερ; αρχη ΙΑΒΑΣΜΑ Κ 100; εφοσον Κ > 1επαναλαβε ( ) για Ι 1 εως Κεπαναλαβε ( εαν Χ[Ι] > Χ[Ι+1] ) Κ Κ-1; ΕΚΤΥΠΩΣΗ τελος ΤΑΞ_ΦΥΣΑΛ τοτε ( Π Χ[Ι]; Χ[Ι] Χ[Ι+1]; Χ[Ι+1] Π; ) 18

19 int I, X[100], K, temp; K = 99; while( K > 0 ) for(i=0; I <= K-1; I++) if( X[I] > Χ[Ι+1]) K = K 1; temp = X[Ι]; X[Ι] = X[Ι+1]; X[Ι+1] = temp;

Αλγόριθµος Εισαγωγής Insertion sort 20 Μέθοδος εισαγωγής στοιχείων στην σωστή θέση 1. Αρχίζουµε από το στοιχείο στην δεύτερη θέση ( το Χ[1] δηλαδή) και το συγκρίνουµε µε τα προηγούµενα στοιχεία, ανταλλάσοντας αν χρειαστεί τα στοιχεία. Αυτό συνεχίζεται µέχρι το Χ[1] να είναι στην σωστή θέση δηλαδή το αµέσως προηγούµενο στονπίνακα είναιµικρότερο του. 2. Επαναλαµβάνουµε την διαδικασίας µε τα υπόλοιπα στοιχεία Χ[2] Χ[Ν-1]. Σε κάθε επανάληψη ένα στοιχείο µπαίνει στην σωστή θέση όσον αφορά την ταξινόµηση.

21 Αλγόριθµος Επιλογής Παράδειγµα Πέρασµα 1 Πέρασµα 2 Πέρασµα 3 Πέρασµα 4 Αρχικός πίνακας: 5 1 2 4 3 Στοιχείο: 5 1 2 4 3 Προώθηση: 1 5 2 4 3 Στοιχείο: 1 5 2 4 3 Προώθηση: 1 2 5 4 3 Στοιχείο: 1 2 5 4 3 Προώθηση: 1 2 4 5 3 Στοιχείο: 1 2 4 5 3 Προώθηση : 1 2 3 4 5

int I, X[100], I, J, N, temp; 22 N = 99; for( I=1; I<=N-1; I++) J=I; while ( J > 0 && X[J] < X[J-1]) temp = X[J]; X[J] = X[J-1]; X[J-1] = temp; j--; Ανταλλαγή στοιχείων είκτης που δηλώνει την θέση του τελευταίου στοιχείου Χ[0] Χ[99] Προώθηση στοιχείων προς τα επάνω στην σωστή θέση

Αλγόριθµος Εισαγωγής Insertion sort C++ /* insertion sort ascending order */ #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char *argv[]) int n, X[100], i, j, temp; cout<<"dose plithos stoixeiwn: "; cin>>n; cout<<"dose "<<n<<" stoixeia. \n"; for (i = 0; i < n; i++) cin>>x[i]; 23

Αλγόριθµος Εισαγωγής Insertion sort C++ συνέχεια 24 for (i = 1 ; i <= n - 1; i++) //ταξινόµηση j = i; while ( j > 0 && X[j] < X[j-1]) temp = X[j]; X[j] = X[j-1]; X[j-1] = temp; j--; cout<< O taksinomhmenos pinakas: \n"; for (i = 0; i <= n - 1; i++) cout<<x[i]<<" "; cout<<endl; system("pause"); return 0;

Αλγόριθµος Συγχώνευσης (Merge Sort) 25 Μας δίνονται δύο ταξινοµηµένοι πίνακες Α[Ν] και Β[Μ] και µας ζητάνε να συγχωνεύσουµε τους πίνακες Α,Β σε έναν ταξινοµηµένο πίνακα Γ[Ν+Μ]. Οπρώτος του Ασυγκρίνεται µε τον πρώτο του Β Ο µικρότερος αποτελεί τον πρώτο του Γ. Ο αριθµός που δεν καταχωρήθηκε συγκρίνεται µε τον επόµενο που καταχωρήθηκε Η διαδικασία συνεχίζεται µέχρι τα στοιχεία του Α ήβνα εξαντληθούν. Τότε τα στοιχεία του πίνακα που δεν εξαντλήθηκε, προσκολλώνται στον πίνακα Γ.

Αλγόριθµος Συγχώνευσης (Merge Sort) 26 Παράδειγµα: Α: 4 7 8 12 19 31 Β: 3 5 10 14 17 ΙΑΙΑΙΑ ΙΑ ΙΑ ΙΒΙΒ ΙΒ ΙΒ Γ: 3 4 5 7 8 10 12 14 17 19 31 ΙΓ ΙΓ ΙΓ ΙΓ ΙΓ ΙΓ

διαδικασια ΤΑΞ_ΣΥΓΧ δηλωση (ΙΑ, ΙΒ, ΙΓ) ακερ; δηλωση ( Α[1:50], Β[1:50], Γ[1:100] ) παραταξηακερ; αρχη ΙΑΒΑΣΜΑ ταξινοµ. Α & Β ΝΑ 50; ΝΒ 50; ΝΓ 100; ΙΑ 1; ΙΒ 1; ΙΓ 1; εφοσον ΙΑ ΝΑ &ΙΒ ΝΒεπαναλαβε ( εαν Α[ΙΑ] < Β[ΙΒ] ) τοτε ( Γ[ΙΓ] Α[ΙΑ]; ΙΓ ΙΓ+1; ΙΑ ΙΑ+1; ) αλλως ( Γ[ΙΓ] Β[ΙΒ]; ΙΓ ΙΓ+1; ΙΒ ΙΒ+1; ) ΕΠΙΚΟΛΗΣΗ ΣΤΟΙΧΕΙΩΝ ΤΟΥ ΠΙΝΑΚΑ τελος ΤΑΞ_ΦΥΣΑΛ εαν ΙΑ = ΝΑ τοτε ( γιαι ΙΒεως ΝΒεπαναλαβε αλλως ( ( Γ[ΙΓ] Β[Ι]; ΙΓ ΙΓ+1; ) ) γιαι ΙΑεως ΝΑεπαναλαβε ( Γ[ΙΓ] Α[Ι]; ΙΓ ΙΓ+1; ) ) 27

int A[50], B[50], C[100]; int IA, IB, IC, NA, NB, NC, I; NA = 49; NB = 49; NC=99; IA = 0; IB = 0; IC = 0; while( (IA <= NA) && (IB <= NB) ) if( A[IA] < B[IB] ) C[IC] = A[IA]; IC = IC + 1; IA = IA + 1; else C[IC] = B[IB]; IC = IC + 1; IB = IB + 1; // ΕΠΙΚΟΛΗΣΗ ΣΤΟΙΧΕΙΩΝ if( IA == NA ) for(i=ib; I<=NB; I++) else C[IC] = B[I]; IC = IC + 1; for(i=ia; I<=NA; I++) C[IC] = A[I]; IC = IC + 1; 28

ιερεύνηση Πινάκων (Αναζήτηση στοιχείου) 29 Αναζήτηση κάποιας τιµής (κλειδί) σε ένα µονοδιάστατο πίνακα. Υπάρχουν δύο βασικές µέθοδοι. ιαδοχική ιερεύνηση (γραµµική αναζήτηση) υαδική Αναζήτηση Θα πρέπει να εξετάζουµε και την περίπτωση που το κλειδί δεν υπάρχει στον πίνακα. ηλαδή να εκτυπώνεται ανάλογο µήνυµα. Τέτοιου είδους τεχνικές χρησιµοποιούν µεταβλητές που λέγονταισηµαίες ήλογικέςµεταβλητές.

ιαδοχική ιερεύνηση 30 Συγκρίνουµε κάθε στοιχείο µε την τιµή κλειδί που αναζητάµε Απλή αλλά αργή µέθοδος (µπορεί να εξετάσουµε όλα τα στοιχεία του πίνακα). [1] [2] [3] [4] [5] [6] Α: 44 17 8 12 19 3 Χ = 11

31 διαδικασια ΓΡΑΜΜ_ΑΝΑΖΗΤ δηλωση (Ι, Κ, Μ, ΚΛ) ακερ; δηλωση ( Χ [1:100] ) παραταξηακερ; αρχη ΙΑΒΑΣΜΑ ΠΙΝΑΚΑ Χ & ΚΛΕΙ Ι ΚΛ Κ 100; ΣΗΜ 1; εφοσον Ι Κ&ΣΗΜ 0 επαναλαβε ( εαν Χ[Ι] =ΚΛ ) εαν ΣΗΜ = 0 τοτε ( ΣΗΜ 0; Μ Ι; ) αλλως ( Ι Ι+1; ) τοτε ( τυπωσε Βρέθηκε, Μ ; ) αλλως ( τυπωσε εν βρέθηκε ; ) τελος ΓΡΑΜΜ_ΑΝΑΖΗΤ για Ι 1 εως 100 επαναλαβε ( διαβασεχ[ι] ; ) διαβασε ΚΛ;

int X[100], I, key, flag, N, POS; N = 99; 32 flag = 0; I = 0; while( (I <= N) && (flag!= 1) ) // διάβασµα πίνακα if( X[I] == key ) // και στοιχείου προς // αναζήτηση flag = 1; cin >> key; POS = I; for(i=0; I<=N; I++) cin >> X[I]; else if(flag == 1) else I = I + 1; cout << Vrethike sthn the thesi << POS; cout << Den vrethike ;

33 υαδική Αναζήτηση Εάν ο πίνακας είναι ταξινοµηµένος τότε µπορούµε να αναζητήσουµε πιο γρήγορα το κλειδί. Συγκρίνουµε το µεσαίο στοιχείο (middle) του πίνακα µε το κλειδί (key) που αναζητάµε Εάν Κλειδί = Μεσαίο, τότε βρέθηκε Εάν Κλειδί < Μεσαίο, τότε η αναζήτηση γίνεται στο αριστερό ήµισυ του πίνακα Εάν Κλειδί > Μεσαίο, τότε η αναζήτηση γίνεται στο δεξιό ήµισυ του πίνακα Επαναλαµβάνουµε την δυαδική αναζήτηση στο ήµισυ που επιλέξαµε

υαδική Αναζήτηση 34 Παράδειγµα Όρια στον πίνακα: Κ: κάτω όριο, Π: πάνω όριο Χ = 11 Α: 3 5 8 12 19 22 44 Κ Μεσο Κ Μεσο Μεσο Π Π

35 διαδικασια ΥΑ _ΑΝΑΖΗΤ δηλωση (Κ, Π, ΚΛ, ΜΕΣ) ακερ; δηλωση ( Χ [1:100] ) παραταξηακερ; αρχη Κ 1; Π 100; ΣΗΜ 1; εφοσον Κ <Π&ΣΗΜ 0 επαναλαβε ( ΜΕΣ (Κ+Π)/2; εαν ΚΛ = Χ[ΜΕΣ] ) τοτε ( ΣΗΜ 0; ) αλλως ( εαν ΚΛ > Χ[ΜΕΣ] ) τοτε ( Κ ΜΕΣ; ) αλλως ( Π ΜΕΣ; ) ΕΚΤΥΠΩΣΗ ΜΕ ΒΑΣΗ ΤΗ ΣΗΜΑΙΑ τελος ΥΑ _ΑΝΑΖΗΤ εαν ΣΗΜ = 0 Εαν τελειώσει η αναζήτηση στον πίνακα Εαν βρεθεί το στοιχείο τοτε ( τυπωσε Βρέθηκε, ΜΕΣ;) αλλως ( τυπωσε εν βρέθηκε ; )

int X[100], K, P, key, flag, MID; 36 flag = 0; K = 0; P = 99; while( (K < P) && (flag!= 1) ) MID = ( K + P )/2; if( X[MID] == key ) flag = 1; else if( X[MID] < key ) K = MID+1; else P = MID-1; if(flag == 1) cout << Vrethike ; else cout << Den vrethike ;