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

Σχετικά έγγραφα
Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

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

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

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

Προγραμματισμός ΙI (Θ)

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Προγραμματισμός I (Θ)

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Δομημένος Προγραμματισμός

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

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

Προγραμματισμός I (E)

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Γλώσσα Προγραμματισμού C

Υπολογισμός - Εντολές Ελέγχου

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

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

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 12 ο Μάθημα 1

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

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

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

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Προγραμματισμός I (Θ)

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

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

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

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

Προγραμματισμός I (Θ)

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Διάλεξη 6: Δείκτες και Πίνακες

Υπολογισμός - Εντολές Επανάληψης

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Transcript:

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής Εφαρμογών (npet@chania.teicrete.gr) Ενδέκατη (11 η ) τρίωρη διάλεξη. Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/courses/el106 Εξάμηνο: Χειμερινό 2017-18

Άσκηση με δομές δεδομένων: Να γραφεί ένα πρόγραμμα, το οποίο να ορίζει τον τύπο μιας δομής με τρία μέλη: α) την ονομασία ενός προϊόντος, β) την τιμή του ανά τεμάχιο, και γ) την ποσότητα που βρίσκεται στην αποθήκη, σε τεμάχια. Επίσης, να ορισθεί ένας γραμμικός πίνακας με εκατό στοιχεία τύπου όπως της παραπάνω δομής το καθένα. Το πρόγραμμα θα πρέπει να γεμίζει τον πίνακα με στοιχεία από την κονσόλα και να τον εμφανίζει στην οθόνη υπό μορφή κατάστασης. 2

Η συνάρτηση main() #include <stdio.h> #include <stdlib.h> #define N 100 /* το μέγεθος του πίνακα */ typedef struct { /* ορισμός νέου τύπου */ char on[20]; /* ονομασία προϊόντος */ float tt; /* τιμή ανά τεμάχιο */ int po; /* ποσότητα σε τεμάχια */ Proion; void eisag (Proion x[]); void emfan (Proion x[]); main() { Proion ap[n]; eisag(ap); emfan(ap); system("pause"); return 0; 3

Οι άλλες συναρτήσεις void eisag (Proion x[]) /* συνάρτηση εισαγωγής στοιχείων */ { int i; for (i=0; i<n; i++) { printf ("Δώστε για το %dο προϊόν την ονομασία : ", i+1); scanf ("%s", x[i].on); printf ("Δώστε τιμή ανά τεμάχιο : "); scanf ("%f", &x[i].tt); printf ("Δώστε ποσότητα : "); scanf ("%d", &x[i].po); return; void emfan (Proion x[]) /* συνάρτηση εμφάνισης στοιχείων */ { int i; printf ("\n\nα/α ΟΝΟΜΑΣΙΑ ΤΙΜΗ/ΤΕΜΑΧΙΟ ΠΟΣΟΤΗΤΑ"); for (i=0; i<n;i++) printf ("\n%3d %10s %12.2f %8d", i+1, x[i].on, x[i].tt, x[i].po); return; 4

Δομές που περιέχουν δομές Μία δομή μπορεί να περιέχει άλλες δομές struct coord { int x; int y; ; struct rectangle { struct coord topleft; struct coord bottomrt; ; struct rectangle mybox; mybox.topleft.x = 0; mybox.topleft.y = 10; mybox.bottomrt.x = 100; mybox.bottomrt.y = 200; Ορίζουμε ορθογώνιο με συντεταγμένες (0, 10) και (100, 200). 5

Δομές που περιέχουν πίνακες Μία δομή μπορεί να περιέχει μία ή περισσότερες διατάξεις οποιουδήποτε τύπου δεδομένων ως μέλη struct data { ; int x[5]; char y[10]; struct data record; record.x[2] = 100; record.y[0] = 'a'; record.y[1] = 'b'; record.y[2] = 'c'; record.y[3] = '\0'; Tα στοιχεία της διάταξης x καταλαμβάνουν διπλάσιο χώρο από της y (διότι 5 x 4 = 20 bytes σε σχέση με τα 10 x 1 = 10 bytes) H έκφραση record.y είναι ένας δείκτης στο πρώτο στοιχείο της διάταξης y[] στη δομή record. Θα μπορούσαμε να προβάλουμε τα περιεχόμενα της y[] στην οθόνη με puts(record.y) ή printf ("%s", record.y); εφόσον το y είναι string (δηλαδή έχει οριοθετημένο το τέλος του με '\0' όπως εδώ) 6

Πίνακες δομών Οι πίνακες (διατάξεις) δομών είναι πολύ ισχυρά εργαλεία προγραμματισμού. struct entry { char fname[10]; char lname[13]; char phone[12]; ; struct entry list[1000]; list[1] = list[5]; strcpy(list[1].phone, list[5].phone); Δηλώνει έναν πίνακα με το όνομα list η οποία περιέχει 1000 στοιχεία. Κάθε στοιχείο είναι μία δομή τύπου entry. Καθεμιά από αυτές τις δομές έχει τρία μέλη, καθένα των οποίων είναι μία διάταξη τύπου char Εκχωρεί σε κάθε μέλος της δομής list[1] τις τιμές που περιέχονται στα αντίστοιχα μέλη της list[5]. Αντιγράφει τη συμβολοσειρά της list[5].phone στη list[1].phone. list[2].phone[3] = list[5].phone[1]; Μετακινεί το δεύτερο χαρακτήρα του αριθμού τηλεφώνου της list[5], στην τέταρτη θέση του αριθμού τηλεφώνου στη list[2]. 7

Σημείωση - Διευκρίνηση Η ετικέτα μίας δομής χρησιμοποιείται για να δηλώσει τη μορφή μίας δομής. Το στιγμιότυπο είναι μία μεταβλητή που δηλώνεται με χρήση της ετικέτας. Μην ξεχνάτε τη λέξη κλειδί struct όταν δηλώνετε ένα στιγμιότυπο από μία δομή που έχει οριστεί προηγουμένως, παρότι σε κάποιες υλοποιήσεις της γλώσσας C δεν απαιτείται πια. 8

Δομές δεδομένων και δείκτες διεύθυνσης (Δείκτες ως μέλη δομών) Οι δείκτες μπορούν να αποτελέσουν μέλη δομών struct data { first; int *value; int *rate; Εδώ δηλώνουμε μία δομή της οποίας τα δύο μέλη είναι δείκτες προς τύπο int. Πρέπει να δώσουμε αρχικές τιμές: int cost=7, interest=12; first.value = &cost; first.rate = &interest; Η έκφραση *first.value έχει την τιμή της cost και ανάλογα η *first.rate έχει την τιμή της interest. 9

Δομές δεδομένων και δείκτες διεύθυνσης (Δείκτες ως μέλη δομών) O δείκτης που χρησιμοποιείται πιο συχνά ως μέλος δομής είναι ο δείκτης προς τύπο char. Μία συμβολοσειρά είναι μία ακολουθία χαρακτήρων που περιγράφεται από ένα δείκτη που δείχνει στον πρώτο χαρακτήρα και από ένα μηδενικό χαρακτήρα που δηλώνει το τέλος της συμβολοσειράς. char *p_message; p_message = "Teach yourself C in 21 days"; struct msg { char *p1; char *p2; myptrs; myptrs.p1 = "Teach yourself C in 21 days"; myptrs.p2 = "by SAMS Publishing"; printf("%s %s", myptrs.p1, myptrs.p2); 10

Δομές δεδομένων και δείκτες διεύθυνσης (Δείκτες ως μέλη δομών) Σε αυτή τη δομή βλέπουμε 2 μεθόδους αποθήκευσης μίας συμβολοσειράς σε μία δομή. struct msg { char p1[30]; char *p2; myptrs; strcpy(myptrs.p1, "Teach yourself C in 21 days"); strcpy(myptrs.p2, "by SAMS Publishing"); Περιορισμένος χώρος στη μνήμη /*πρόσθετος κώδικας*/ puts(myptrs.p1); puts(myptrs.p2); 11

Δομές δεδομένων και δείκτες διεύθυνσης (Δείκτες σε δομές) struct part { ; int number; char name[10]; Η p_part είναι ένας δείκτης σε τύπο part και όχι ένα στιγμιότυπο τύπου part. struct part *p_part; Μεταβλητή τύπου δομής struct part va; Εκχωρεί τη διεύθυνση της va στον p_part) p_part = &va; (*p_part).number = 100; p_part->number = 100; va.number = 100; Εκχωρεί τη τιμή 100 στη va.number Το ίδιο με πριν, με τον «τελεστή βέλος» έμμεσης σχέσης μέλους, (arrow operator) Ισοδύναμες προτάσεις 12

Δείκτες και διατάξεις δομών struct part { int number; char name[10]; Αφού ορίσουμε τη δομή part, μπορούμε να δηλώσουμε μία διάταξη τύπου part: struct part data[100]; Μετά μπορούμε να δηλώσουμε ένα δείκτη διεύθυνσης σε τύπο part και να του δώσουμε ως αρχική τιμή να δείχνει στην πρώτη δομή (δηλαδή το πρώτο στοιχείο) της διάταξης data: struct part *p_part; p_part = &data[0]; // ή καλύτερα: p_part = data; Προβολή του περιεχομένου της πρώτης δομής της διάταξης δομών, με pointer: printf("%d %s\n", p_part->number, p_part->name); ή ισοδύναμα με πίνακα και δείκτη πίνακα: printf("%d %s\n", data[0].number, data[0].name); 13

Αναδρομή (recursion) Μία συνάρτηση μπορεί να καλεί τον εαυτό της! Αυτή η τεχνική λέγεται αναδρομή. Η αναδρομή είναι σημαντική τεχνική για τον υπολογισμό αναδρομικών συναρτήσεων. Ένα τυπικό παράδειγμα αναδρομικής συνάρτησης είναι αυτό που χρησιμοποιείται για τον υπολογισμό του παραγοντικού γινομένου. Σημαντικό: Μια αναδρομική συνάρτηση θα πρέπει: 1. Να έχει μια συνθήκη τερματισμού της αναδρομής. 2. Να καλεί αναδρομικά τη συνάρτηση με τέτοιο τρόπο ώστε η συνθήκη τερματισμού κάποια στιγμή (μετά από ν αναδρομές) να γίνει αληθής. 14

Παράδειγμα αναδρομής Το παραγοντικό γινόμενο ενός αριθμού x υπολογίζεται σαν το γινόμενο x! = x * (x-1) * (x-2) * (x-3). *1 = x * (x-1)! επίσης εξ ορισμού: 0! = 1 Δηλαδή: x! = { 1 Εάν x = 0 x * (x-1)! Εάν x > 0 15

Συνέχεια παραδείγματος #include <stdio.h> unsigned long int factorial(unsigned int a); main() { unsigned long int f, x; printf("enter an integer value between 0 and 12 : "); scanf("%d", &x); if (x > 12 x < 0) { printf("only values from 0 to 12 are acceptable!"); else { f = factorial (x); printf("%u factorial equals %u\n", x, f); return (0); unsigned long int factorial(unsigned int a) { unsigned long int f; if (a == 0) f = 1; else f = a * factorial(a-1); return f; Αν a=3, τότε a!= 3 *(3-1)! Καλείται ξανά η συνάρτηση για το a- 1 δηλαδή το (3-1)! το οποίο είναι 2 * (2-1)! δηλ. 2 *1!. Το a τώρα είναι 1, δηλ. 1* 0!. Εφόσον το a τώρα είναι 0 η συνάρτηση τερματίζει. Στο α έχει καταχωρηθεί η τιμή 3 * 2 * 1 *1= 6 Η διαδικασία συνεχίζεται μέχρι να είναι αληθής η συνθήκη της συνάρτησης if (a ==0 ) 16

Παράδειγμα αναδρομικής συνάρτησης #include <stdio.h> #include <stdlib.h> #include <math.h> float dynami(float, int); Υλοποίηση προγράμματος για τον υπολογισμό της ύψωσης ενός πραγματικού αριθμού σε έναν οποιοδήποτε ακέραιο. Η ύψωση να γίνει σε ξεχωριστή συνάρτηση και μάλιστα τόσο σε μη αναδρομική μορφή όσο και σε αναδρομική μορφή. main() { float bash, dyn; int ekth; printf("\nδώστε βάση (πραγματικό) : "); scanf("%f", &bash); printf("\nδώστε εκθέτη (ακέραιο) : "); scanf("%d", &ekth); dyn = dynami(bash, ekth); printf("\nη ύψωση του %.3f εις την %d κάνει %.4f\n", bash, ekth, dyn); system("pause"); return 0; 17

Παράδειγμα (συνέχεια) /*Μη αναδρομική μορφή της συνάρτησης */ /*Αναδρομική μορφή της συνάρτησης */ float dynami(float b, int e) { float p=1.0; int i; for(i=0; i < abs(e); i++) p = p*b; if (e<0) p = 1/p; return p; float dynami(float b, int e) { float p; if (e == 0) p = 1.0; else if (e > 0) p = dynami(b, e-1)*b; else p = dynami(b, e+1)/b; return p; Σημείωση: Η συνάρτηση για την απόλυτη τιμή, abs() absolute value, ευρίσκεται μέσα στο αρχείο επικεφαλίδα math.h, γι αυτό και το συμπεριλάβαμε στην αρχή. 18

Μέθοδοι ταξινόμησης Συχνά χρειάζεται να διατάξουμε σύνολα αντικειμένων σε μια καθορισμένη σειρά. Η διαδικασία της τοποθέτησης των αντικειμένων σε μια καθορισμένη σειρά ονομάζεται ταξινόμηση (sorting). Σχεδόν πάντα τα αντικείμενα είναι δομές που αποτελούνται από περισσότερα μέλη. Το πεδίο (ή το υποσύνολο των πεδίων) που χρησιμοποιείται για να γίνει η ταξινόμηση των αντικειμένων λέγεται κλειδί (key) της ταξινόμησης. Ταξινομούμε, λοιπόν, τις εγγραφές με τέτοιο τρόπο ώστε τα κλειδιά τους να είναι σε αύξουσα διάταξη, ή σε φθίνουσα διάταξη. Χωρίς να χάνουμε από την γενικότητα, όσο θα μελετάμε τις μεθόδους ταξινόμησης και όχι τις εφαρμογές τους, μπορούμε να χρησιμοποιούμε πολύ απλουστευμένα αντικείμενα, όπως ακέραιους αριθμούς, που είναι κλειδιά του εαυτού τους. 19

Απ ευθείας επιλογή (sort by selection) Ας υποθέσουμε, ότι θέλουμε να ταξινομήσουμε σε αύξουσα διάταξη μια ακολουθία από 8 ακέραιους, έστω αυτήν που ακολουθεί: 8 5 4 9 3 5 2 7 Αρχικά, ανταλλάσσουμε τον μικρότερο από τους ακέραιους με τον πρώτο, και έτσι καταφέραμε να τοποθετήσουμε ήδη το πρώτο στοιχείο στην σωστή θέση. 2 5 4 9 3 5 8 7 Στην συνέχεια εφαρμόζουμε την ίδια διαδικασία και στην ακολουθία που αρχίζει από τον δεύτερο μέχρι τον τελευταίο. Επιλέγουμε λοιπόν το 3 και το ανταλλάζουμε με το 5. Μ αυτόν τον τρόπο έχουμε τοποθετήσει τους δύο πρώτους αριθμούς στην σωστή θέση. 2 3 4 9 5 5 8 7 Συνεχίζουμε ομοίως μέχρι να τοποθετήσουμε και τον προτελευταίο. Ο τελευταίος θα είναι στην θέση του ούτως ή άλλως. 2 3 4 9 5 5 8 7 2 3 4 5 9 5 8 7 2 3 4 5 5 9 8 7 2 3 4 5 5 7 8 9 2 3 4 5 5 7 8 9 20

Απ ευθείας επιλογή (sort by selection) Η συνάρτηση sortbyselection() που ακολουθεί, ταξινομεί σε αύξουσα διάταξη έναν πίνακα ακεραίων υλοποιώντας την μέθοδο που μόλις περιγράψαμε. void sortbyselection(int a[], int n) { int i, j, k, min; for(i=0; i<n-1; i++) { k=i; min=a[k]; for (j=i+1;j<n;j++) if (a[j]<min) { k=j; min=a[k]; a[k]=a[i]; a[i]=min; return; int i, j, k, min; for(i=0; i<n-1; i++) { k=i; min=a[k]; for (j=i+1;j<n;j++) if (a[j]<min) a[k] { k=j; min=a[k]; min=a[k]; a[k]=a[i]; a[i]=min; return; 21