summaryrefslogtreecommitdiff
path: root/I_anno/Programmazione_2/algorithms/mergesort.cc
diff options
context:
space:
mode:
authorSanto Cariotti <dcariotti24@gmail.com>2020-05-10 18:57:13 +0200
committerSanto Cariotti <dcariotti24@gmail.com>2020-05-10 18:57:13 +0200
commit0d2341999a9c844954aca9ed4cc739b8fde34584 (patch)
tree9575ea700afe2c1bc2d2b8a2145bde52b8ef386b /I_anno/Programmazione_2/algorithms/mergesort.cc
parent3d856cead127c2a0c30814cc40334beb102cfb30 (diff)
chore: move algorithms file into self directory
Diffstat (limited to 'I_anno/Programmazione_2/algorithms/mergesort.cc')
-rw-r--r--I_anno/Programmazione_2/algorithms/mergesort.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/I_anno/Programmazione_2/algorithms/mergesort.cc b/I_anno/Programmazione_2/algorithms/mergesort.cc
new file mode 100644
index 0000000..68d28cb
--- /dev/null
+++ b/I_anno/Programmazione_2/algorithms/mergesort.cc
@@ -0,0 +1,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[] = {7,1,22,3,2,12,27,31,6};
+ for(int i = 0; i < 9; ++i) {
+ cout << a[i] << ' ';
+ }
+ cout << endl;
+ mergesort(a, 0, 8);
+ for(int i = 0; i < 9; ++i) {
+ cout << a[i] << ' ';
+ }
+
+ return 0;
+}