【演算法實作筆記】合併排序法 C# Unity內使用

實作一下最近學的演算法

分條逐步講解 大綱

合併的逐步

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
using UnityEngine;
using System.Collections;

public class MergeSort_ : MonoBehaviour {


int[] S = new int[8]{10,15,0,4,9,55,70,66};


void Start()
{
MergeSort (8, S);
for (int i = 0; i < S.Length; i++) {
Debug.Log (S [i]);
}
}

void MergeSort(int n, int[] data)
{
if (n > 1) {
int h = n / 2 , m= n - h;
int[] left = new int[h];
int[] right = new int[m];
for (int x = 0; x < h; x++) {
left [x] = data [x];
}
for (int y = 0; y < m; y++) {
right [y] = data [h + y];
}
MergeSort (h, left);
MergeSort (m, right);
Merge (data, left, right);
}

}


void Merge(int[] data, int[] left, int[] right)
{
int i = 0, j = 0,k = 0;
while (j<left.Length&&k<right.Length) {

if (left [j] < right [k]) {
data [i] = left [j];
j += 1;
} else {
data [i] = right [k];
k += 1;
}
i += 1;
}

if (j == left.Length-1)
while (k < left.Length)
data [i++] = right [k++];
else
while (j < right.Length)
data [i++] = left [j++];


}

}