11a. Selection sort
2021-03-14
slides.com/jod/pt_11a
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Sorteeralgoritmes
Input: sequentie sorteerbare elementen
- Bvb. [5,3,1,7,2,6,4,5]
Output: gesorteerde sequentie
- [1,2,3,4,5,5,6,7]
- In deze presentaties: array van gehele getallen sorteren van klein naar groot
- a[i..j] geeft subarray van index i tot en met j-1 aan
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Sorteeralgoritmes
Overzicht:
- Hst 11.2: selection sort (11a)
- Hst 11.3: insertion sort (slaan we over)
- uitstekende oefening om zelf te implementeren
- Hst 11.4: quicksort (11b)
- niet in cursus: merge sort (11c)
- nog veel meer (slaan we ook over ;)
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Selection sort
- Selecteer het kleinste element in de array
- Wissel met het element vooraan
- Herhaal met de rest van de array
- Simpel!
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Selection sort
void swap(int* x, int* y){
int tmp = *x;
*x = *y;
*y = tmp;
}
void selection(int a[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
if (a[j] < a[i]) {
swap(&a[i],&a[j]);
}
}
}
}
Vind kleinste element in a[i..n], stockeer in a[i]
Herhaal voor steeds kleinere restarrays
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Selection sort
#define N 8
int main() {
int a[N] = {5,3,1,7,2,6,4,5};
selection(a, N);
for (int i = 0; i < N; ++i) {
printf("%d ", a[i]);
}
printf("\n");
}
$ ./a.out
1 2 3 4 5 5 6 7
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Snelheidsanalyse
void swap(int* x, int* y){
int tmp = *x;
*x = *y;
*y = tmp;
}
void selection(int a[], int n) {
for (int i = 0; i < n - 1; ++i){
for (int j = i+1; j < n; ++j){
if (a[j] < a[i]) {
swap(&a[i],&a[j]);
}
}
}
}
Aantal keren door de binnenste for-loop:
Dat kan beter :)
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Samenvatting
- Sorteeralgoritmes ordenen een sequentie van sorteerbare elementen
- Selection sort is simpel, maar doet er O(n^2) stappen over
11a. Selection sort
By Jo Devriendt
11a. Selection sort
- 683