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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2012

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

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

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

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

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

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

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

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

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

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

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

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

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

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

ΠΙ Ν Α Κ Ε Σ (arrays)

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ. Πίνακες και βασικές επεξεργασίες αυτών

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

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

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

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

Ασκήσεις στα υποπρογράμματα

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

Transcript:

Εργαστηριακή Άσκηση 1 Επανάληψη προγραμματισμού Βασικοί Αλγόριθμοι Είσοδος τιμών από το πληκτρολόγιο Σε όλα τα προγράμματα που θα γράψουμε στην συνέχεια του εξαμήνου θα χρειαστεί να εισάγουμε τιμές σε ένα πίνακα και με βάση αυτές τις τιμές να έχουμε κατάλληλους υπολογισμούς. Δραστηριότητα 1 Χρησιμοποιώντας τον παρακάτω παράρτημα κώδικα να γράψετε ένα πρόγραμμα που θα διαβάζει από το πληκτρολόγιο Ν τιμές και θα τις τυπώνει στην οθόνη. Το N είναι μία σταθερά που έχει γίνει define στην αρχή του προγράμματος. #include <stdio.h> #include <stdlib.h> #define N 5 int main() { int i; int A[N]; //read values for( ){ //use scanf function //ouput values for( ){ //use printf function Υπολογισμός Αθροίσματος Η πιο απλή πράξη που μπορούμε να εκτελέσουμε στα δεδομένα που διαβάσαμε είναι να υπολογίσουμε το άθροισμα των στοιχείων. Για να γίνει αυτό πρέπει να έχουμε μία μεταβλητή sum που θα την αρχικοποιούμε στο 0 (μηδέν) και στη συνέχεια κάθε στοιχείο θα το

προσθέτουμε στη μεταβλητή sum. Δραστηριότητα 2 Χρησιμοποιώντας το πρόγραμμα της δραστηριότητας 1 υλοποιήστε ένα πρόγραμμα όπου θα διαβάζετε ένα πίνακα Ν θέσεων. Στη συνέχεια θα υπολογίζεται το άθροισμα και θα το εκτυπώνετε. Υπόδειξη: Καλό είναι να εμφανίζεται κατάλληλο μήνυμα μαζί με τα αποτελέσματα ώστε να καταλαβαίνει ο χρήστης τι είναι αυτό που βλέπει στην οθόνη. Εύρεση ελάχιστου στοιχείου Πολύ συχνά καλούμαστε να βρούμε το ελάχιστο στοιχείο ενός πίνακα. Για τον λόγο αυτό πρέπει να διατρέξουμε όλο τον πίνακα και να κρατάμε κάθε φορά το τρέχον ελάχιστο. Αρχικά το ελάχιστο είναι το πρώτο στοιχείο. Στη συνέχεια, κάθε στοιχείο το συγκρίνουμε με το τρέχον ελάχιστο και αν είναι μικρότερο τότε ανανεώνουμε το τρέχον ελάχιστο. Άρα θα χρησιμοποιήσουμε μία μεταβλητή min που θα αποθηκεύουμε το τρέχον ελάχιστο. Δραστηριότητα 3 Χρησιμοποιώντας το πρόγραμμα της δραστηριότητας 2 και το παρακάτω τμήμα ψευδοκώδικα υλοποιήστε ένα πρόγραμμα όπου θα διαβάζετε ένα πίνακα Ν θέσεων και στη συνέχεια θα βρίσκετε και θα εκτυπώνετε το ελάχιστο στοιχείο του πίνακα. min=πρώτο στοιχείο; Για κάθε στοιχείο x Αν x < min min=x; τελος αν τελος για Εύρεση θέσης ελαχίστου Ακόμη πιο συχνά από το ελάχιστο θέλουμε την θέση του ελάχιστου. Για τον λόγο αυτό μπορούμε να κρατάμε εκτός από το τρέχον ελάχιστο και την θέση(minpos) όπου το έχουμε βρει. Δραστηριότητα 4 Χρησιμοποιώντας το πρόγραμμα της δραστηριότητας 3 υλοποιήστε ένα πρόγραμμα όπου θα διαβάζετε ένα πίνακα Ν θέσεων και στη συνέχεια θα βρίσκετε και θα εκτυπώνετε το ελάχιστο καθώς και την θέση του. Εργαστηριακή Άσκηση 2

Γραμμική Αναζήτηση Δυαδική Αναζήτηση Ταξινόμηση Φυσαλίδας Γραμμική Αναζήτηση Συχνά καλούμαστε να αναζητήσουμε μέσα σε ένα πίνακα στοιχείο ένα συγκεκριμένο στοιχειό. Αν το στοιχείο αυτό υπάρχει πρέπει να εκτυπώσουμε την θέση στην οποία βρίσκεται αλλίως πρέπει να εμφανίσουμε μήνυμα πως δεν βρέθηκε. Δραστηριότητα 1 Να γραφεί συνάρτηση με προτότυπο: int linear_search(int A[], int x); Η συγκεκριμένη συνάρτηση πρέπει να ψάχνει το στοιχείο x μέσα στον πίνακα Α. Αν το βρει θα επιστρέφει την θέση του αλλιώς θα επιστρέφει -1. Επίσης να γραφεί main που θα ζητάει από τον χρήστη να δώσει τον πίνακα Α και ένα στοιχείο x. Στην συνέχεια ο θα καλείται η συνάρτηση και θα τυπώνετε μήνυμα ανάλογα με το τι επέστρεψε. Δυαδική Αναζήτηση Η γραμμική αναζήτηση πρέπει να ψάξει όλο τον πίνακα για να αποφασίσει αν υπάρχει ή όχι ένα στοιχείο. Για τον λόγο αυτό είναι πολύ αργή στην περίπτωση που ο πίνακας είναι μεγάλος. Αν όμως υποθέσουμε ότι ο πίνακας είναι ταξινομημένος τότε μπορούμε να εφαρμόσουμε την δυαδική αναζήτηση. Δραστηριότητα 2 Να γραφεί συνάρτηση με πρωτότυπο: int binary_search(int A[], int x); Η συγκεκριμένη συνάρτηση θα εφαρμόζει την γραμμική αναζήτηση και στη συνέχεια θα επιστρέφει την θέση του στοιχείου x ή -1 αν δεν υπάρχει στον πίνακα Α. Μπορείτε να χρησιμοποιήσετε το παρακάτω τμήμα κώδικα lower = 0; upper = N -1 while(lower<=upper){ middle = (upper - lower ) / 2; if(a[middle] == x) { return middle; else if(a[middle] < x){

lower = middle + 1; else { upper = middle - 1; return -1; Τέλος να γράψετε μία main για να δοκιμάζετε την συνάρτηση που μόλις γράψατε. Δραστηριότητα 3 Χρησιμοποιώντας το αποτέλεσμα της Δραστηριότητας 2 να δείξετε πια είναι τα ενδιάμεσα βήματα για την δυαδική αναζήτηση. Για να το κάνετε αυτό πρέπει να εκτυπώνετε κάθε φορά το αριστερό άκρο(lower) και το δεξί άκρο(upper). Ταξινόμηση φυσαλιδας (bubble sort) Η πιο απλή μέθοδος να ταξινομήσουμε τα δεδομένα είναι η ταξινόμηση φυσαλίδας. Σε αυτή τα μικρότερα στοιχεία ανεβαίνουν τις θέσεις όπως οι φυσαλίδες στο νερό. Έτσι προέκυψε και το όνομά της. Ένας ενδεικτικός κώδικας για την φυσαλίδα είναι ο ακόλουθος: int i,j,tmp; for(i=ν-2;i>=0;i--){ for(j=0;j<=i;j++){ if(α[j]>α[j+1]){ tmp=α[j]; Α[j]=Α[j+1]; Α[j+1] = tmp; Δραστηριότητα 4 Να γράψετε μια συνάρτηση που θα δέχεται που θα δέχεται ως όρισμα ένα πίνακα και θα εφαρμόζει την ταξινόμηση της φυσαλίδας. Για να δοκιμάσετε την συνάρτηση να γράψετε και μία main που θα την καλεί κατάλληλα. Δραστηριότητα 5 Χρησιμοποιώντας το αποτέλεσμα της Δραστηριότητας 4, να δείξετε πως είναι ο πίνακας μετά από κάθε βήμα. Για να το κάνετε αυτό πρέπει μετά από κάθε επανάληψη του i να εκτυπώσετε ολόκληρο τον πίνακα.

Εργαστηριακή Άσκηση 3 Ταξινόμηση Εισαγωγής Ταξινόμηση Επιλογής Ταξινόμηση εισαγωγής (insertion sort) Ο συγκεκριμένος αλγόριθμος θεωρεί ένα αρχικό τμήμα ταξινομημένο ως προς τον εαυτό του και το υπόλοιπο τμήμα μη ταξινομημένο Σε κάθε βήμα παίρνει το πρώτο στοιχείο από το μη ταξινομημένο και το εισάγει στο ταξινομημένο. Στη συνέχεια υπάρχει ενδεικτικός ψευδοκώδικας για την ταξινόμηση της εισαγωγής. for (i = 1; i < n; i++) { key = A[i]; j = i - 1; while ((j >= 0) && (key < a[j])) { a[j + 1] = a[j]; j----; a[j + 1] = key; Δραστηριότητα 1 Να γράψετε μια συνάρτηση που θα δέχεται που θα δέχεται ως όρισμα ένα πίνακα και θα εφαρμόζει την ταξινόμηση εισαγωγής. Για να δοκιμάσετε την συνάρτηση να γράψετε και μία main που θα την καλεί κατάλληλα. Δραστηριότητα 2 Χρησιμοποιώντας το αποτέλεσμα της Δραστηριότητας 1, να δείξετε πως είναι ο πίνακας μετά από κάθε βήμα. Για να το κάνετε αυτό πρέπει μετά από κάθε επανάληψη του i να εκτυπώσετε ολόκληρο τον πίνακα. Ταξινόμηση επιλογής (selection sort) O συγκεκριμένος αλγόριθμος σε κάθε βήμα εκτελεί μία εύρεση ελαχίστου από μία θέση μέχρι το τέλος. Αφού βρει το ελάχιστο το τοποθετεί στη θέση και στην συνέχεια πηγαίνει στην επόμενη θέση και ψάχνει ξανά για ελάχιστο. Η εύρεση ελαχίστου θα γίνει σε πλήθος στοιχείων μειωμένο κατά ένα. Έτσι, σε κάθε βήμα τοποθετεί το κάθε στοιχείο στη σωστή θέση και μειώνει το πλήθος των στοιχείων που πρέπει να ταξινομηθούν κατά ένα. Στη συνέχεια υπάρχει ενδεικτικός ψευδοκώδικας για την ταξινόμηση της επιλογής.. for (i = 0; i < (SIZE-1); i++) {

min = i; for (j = (i+1); j < SIZE; j++) { if(num[j] < num[min]) { min = j; if (i!= min) { swap = num[i]; num[i] = num[min]; num[min] = swap; Δραστηριότητα 3 Να γράψετε μια συνάρτηση που θα δέχεται που θα δέχεται ως όρισμα ένα πίνακα και θα εφαρμόζει την ταξινόμηση επιλογής. Για να δοκιμάσετε την συνάρτηση να γράψετε και μία main που θα την καλεί κατάλληλα. Δραστηριότητα 4 Χρησιμοποιώντας το αποτέλεσμα της Δραστηριότητας 3, να δείξετε πως είναι ο πίνακας μετά από κάθε βήμα. Για να το κάνετε αυτό πρέπει μετά από κάθε επανάληψη του i να εκτυπώσετε ολόκληρο τον πίνακα.

Εργαστηριακή Άσκηση 4 Ταξινόμηση Συγχώνευσης Ταξινόμηση συγχώνευσης (merge sort) Ο συγκεκριμένος αλγόριθμος είναι ένα αναδρομικός αλγόριθμος και ανήκει στην κατηγορία των αλγορίθμων διαίρει και βασίλευε. Σε κάθε βήμα διαιρεί την είσοδο σε δύο τμήματα και καλείται αναδρομικά ώστε να ταξινομήσει καθένα από τα δύο τμήματα. Στη συνέχεια, αφού ταξινομηθούν τα δύο τμήματα, εκτελεί μία συγχώνευση δύο ταξινομημένων πινάκων. Στη συνέχεια, υπάρχει ο κώδικας για την συγχώνευση δύο ταξινομημένων πινάκων μεγέθους N και M αντίστοιχα. int merge(int A[N], int B[M], int C[K]) { int i,j,k; i=j=k=0; while(i<n && j <M){ if(a[i]<b[j]){ C[k]=A[i]; i++; else{ C[k]=B[j]; j++; k++; while(i<n){ C[k]=A[i]; k++; i++; while(j<m){ C[k]=B[j]; k++; j++; Δραστηριότητα 1 Να γράψετε μια συνάρτηση που θα δέχεται που θα δέχεται ως ορίσματα τρεις πίνακες ακεραίων και δύο ακεραίους. Οι δύο πρώτοι πίνακες είναι ταξινομημένοι και η συνάρτηση θα τους συγχωνεύσει και θα τους αποθηκεύσει στον τρίτο πίνακα. Οι δύο ακέραιοι που παίρνει ως

όρισμα η συνάρτηση θα είναι το μέγεθος των δύο πινάκων αντίστοιχα. Δραστηριότητα 2 Να γράψετε μια συνάρτηση που θα δέχεται που θα δέχεται ως όρισμα ένα πίνακα και θα εφαρμόζει την ταξινόμηση συχγώνευσης. Για να δοκιμάσετε την συνάρτηση να γράψετε και μία main που θα την καλεί κατάλληλα. Στην συνέχεια η υπάρχει ο κώδικας για την συνάρτηση υλοποίησης της merge_sort. void merge_sort(int A[], int N) { int i,j; int B[N/2], C[N/2]; if(n<=1) return ; for(i=0; i<n/2; i++){ B[i]=A[i]; for(i=n/2; i<n; i++){ C[i-N/2] = A[i]; merge_sort(b,n/2); merge_sort(c,n/2); merge(b,c,a,n/2,n/2); Δραστηριότητα 3 Χρησιμοποιώντας το αποτέλεσμα της Δραστηριότητας 2, να δείξετε πως είναι ο πίνακας μετά από κάθε βήμα. Για να το κάνετε αυτό πρέπει μετά από κάθε αναδρομική κλήση να εκτυπώσετε ολόκληρο τον πίνακα. Δοκιμάστε ως είσοδο τα νούμερα {2,1,4,7,3,9,6,0.

Εργαστηριακή Άσκηση 5 Quicksort - Ταχυταξινόμηση Quicksort Ο συγκεκριμένος αλγόριθμος είναι ένα αναδρομικός αλγόριθμος και ανήκει στην κατηγορία των αλγορίθμων διαίρει και βασίλευε. Σε κάθε βήμα διαλέγει ένα τυχαίο στοιχείο x και το τοποθετεί στην σωστή του θέση με βάση την αύξουσα σειρά ταξινόμησης. Για να το βρει την θέση του μετράει πόσα στοιχεία είναι μικρότερα από αυτό. Στην συνέχεια, με κατάλληλες αντιμεταθέσεις, φέρνει όλα τα στοιχεία που είναι μικρότερα του x, αριστερά του, ενώ δεξιά του φέρνει όλα τα μεγαλύτερα. Στην συνέχεια υπάρχει κώδικας για την υλοποίηση της quicksort void quick_sort(int A[], int low, int upper) { int i,j, pivot, pos,tmp; if(low>=upper) return; pivot = A[low]; pos=low; for(i=low+1; i<=upper; i++){ if(a[i]<pivot){ pos++; A[low]=A[pos]; A[pos]= pivot; i=low; j=upper; while(i<pos && j>pos){ while(a[i]<pivot && i<pos){ i++; if(i>=pos) break; while(a[j]>pivot && j>pos){ j--; if(j<=pos) break; tmp=a[i]; A[i]=A[j]; A[j]=tmp; quick_sort(a,low,pos-1); quick_sort(a,pos+1,upper);

Δραστηριότητα 1 Να γράψετε την παραπάνω συνάρτηση σε ένα πρόγραμμα και να υλοποιήσετε κατάλληλη main που θα την καλεί με είσοδο τον πίνακα {2,1,4,7,3,9,6,0. Δραστηριότητα 2 Να τροποποιήσετε το παραπάνω πρόγραμμα ώστε να εμφανίζει και τα ενδιάμεσα βήματα του αλγορίθμου quicksort. Για να το πετύχετε αυτό πρέπει να βάλετε μία εντολή εκτύπωσης του πίνακα πρίν τις δύο αναδρομικές κλήσεις της quicksort.