summaryrefslogtreecommitdiff
path: root/Year_1/Programming_2/algorithms/selectionsort.cc
blob: 57dcc1783c584845972d2cdd273021f9e81f2133 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<algorithm>

using namespace std;

void selectionsort(int a[], int n) {
    for(int i = 0; i < n-1; ++i) {
        int min = i;
        for(int j = i+1; j < n; ++j) {
            if(a[j] < a[min])
                min = j;
        }

        swap(a[min], a[i]);
    }
}

int min_i(int a[], int i, int j) {
    if(i == j) return i;

    int k = min_i(a, i+1, j);
    return (a[i] < a[k]) ? i : k;
}

void selectionsort_rec(int* a, int b, int e=0) {
    if(b == e) return;

    int key = min_i(a, e, b-1);
    if(key != e)
        swap(a[key], a[e]);

    selectionsort_rec(a, b, e+1);
}

int main() {
    int arr[] = {3,450,12,4,-1,0,24,95,123,0};
    for(int i = 0; i < 10; ++i) {
        cout << *(arr+i) << ' ';
    }
    cout << endl;
    selectionsort_rec(arr, 10);
    for(int i = 0; i < 10; ++i) {
        cout << *(arr+i) << ' ';
    }
    return 0;
}