diff options
Diffstat (limited to 'I_anno')
-rw-r--r-- | I_anno/Programmazione_2/mergesort.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/I_anno/Programmazione_2/mergesort.cc b/I_anno/Programmazione_2/mergesort.cc new file mode 100644 index 0000000..6df83e5 --- /dev/null +++ b/I_anno/Programmazione_2/mergesort.cc @@ -0,0 +1,53 @@ +#include<iostream> + +using namespace std; + +void merge(int A[], int l, int q, int r) { + int size = (sizeof(*A)*2)+1; + int i = l; + int j = q+1; + int k = l; + int B[size]; + + 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; +} |