-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmergesort.h
72 lines (57 loc) · 1021 Bytes
/
mergesort.h
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma once
void merge(int *arr, int l, int mid, int r)
{
int left = mid - l + 1;
int right = r - mid;
int* larr = new int [left];
int *rarr = new int [left];
for (int i = 0; i < left; i++)
{
larr[i] = arr[l + i];
}
for (int j = 0; j < right; j++)
{
rarr[j] = arr[mid + 1 + j];
}
int i=0;
int j=0;
int k=l;
while (i<left && j < right)
{
if (larr[i]<=rarr[j])
{
arr[k]=larr[i];
i++;
}
else
{
arr[k]=rarr[j];
j++;
}
k++;
}
while (i < left)
{
arr[k]=larr[i];
i++;
k++;
}
while (j < right)
{
arr[k]=rarr[j];
j++;
k++;
}
delete []larr;
delete []rarr;
}
void mergeSort(int *arr, int l, int r)
{
if (l < r)
{
int m = l+(r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
}