-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMergeSortBottomUp.cs
54 lines (49 loc) · 1.3 KB
/
MergeSortBottomUp.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 MergeSortBottomUp
{
public static string[] Sort(string[] arr)
{
var size = arr.Length;
var lastIndex = size - 1;
var aux = new string[size];
for(int i = 1; i <size; i=(2*i))
{
for(int j = 0; j < (size - i); j+=(2*i))
{
Merge(arr, aux, j, j+i-1, System.Math.Min((j+(2*i) -1), size - 1));
}
}
return arr;
}
private static void Merge(string[] arr, string[] aux, int lo, int mid, int hi)
{
if(lo >= hi) return;
for (int e = lo; e <= hi; e++)
{
aux[e] = arr[e];
}
var i = lo;
var j = mid +1;
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++];
}
}
}
}
}