summaryrefslogtreecommitdiff
path: root/I_anno/Programmazione_2/mergesort.cc
blob: 21dc8af1cb4f73fbca2d92a95e27a1c039161e10 (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
47
48
49
50
51
52
#include<iostream>

using namespace std;

void merge(int A[], int l, int q, int r) {
    int i = l;
    int j = q+1;
    int k = l;
    int B[r];

    while((i <= q) && (j <= r)) {
        if(A[i] <= A[j])
            B[k] = A[i++];
        else
            B[k] = A[j++];

        k++;
    }

    while(i <= q)
        B[k++] = A[i++];

    while(j <= r)
        B[k++] = A[j++];

    for(k = l; k <= r; ++k) 
        A[k] = B[k];
}

void mergesort(int A[], int l, int r) {
    if(l < r) {
        int q = (l+r)/2;
        mergesort(A, l, q);
        mergesort(A, q+1, r);
        merge(A, l, q, r);
    }
}


int main() {
    int a[] = {2, 4, 72, 100, 2, 12, 0, 0, 1, 23, 45, 12, 120, 3, 6};
    for(int i = 0; i < 15; ++i) {
        cout << a[i] << ' ';
    }
    cout << endl;
    mergesort(a, 0, 14);
    for(int i = 0; i < 15; ++i) {
        cout << a[i] << ' ';
    }

    return 0;
}