-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMergeSort.cs
54 lines (48 loc) · 1.29 KB
/
MergeSort.cs
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
namespace Sort
{
public class MergeSort
{
public static string[] Sort(string[] arr)
{
var aux = new string[arr.Length];
Sort(arr, aux, 0, arr.Length - 1);
return arr;
}
private static void Sort(string[] arr, string[] aux, int lo, int hi)
{
if(hi <= lo) return;
int mid = lo + (hi - lo) / 2;
Sort(arr, aux, lo, mid);
Sort(arr, aux, mid + 1, hi);
Merge(arr, aux, lo, mid, hi);
}
private static void Merge(string[] arr, string[] aux, int lo, int mid, int hi)
{
var i = lo;
var j = mid + 1;
for(int e = lo; e <= hi; e++)
{
aux[e] = arr[e];
}
for(int k = lo; k <= hi; k++)
{
if(i > mid)
{
arr[k] = aux[j++];
}
else if(j > hi)
{
arr[k] = aux[i++];
}
else if(aux[i].CompareTo(aux[j]) < 0)
{
arr[k] = aux[i++];
}
else
{
arr[k] = aux[j++];
}
}
}
}
}