对一个数组进行排序,使其有序
利用归并算法,将数组不断拆分成一个数字,最后不断归并、返回,形成一个有序数组。
MergeSort算法
function void merge(int[] array, int left, int mid, int right)
int[] temp ←new int[right – left + 1];
int s1 ←left, s2 ←mid + 1, index ←0;
while s1 <= mid and s2 <= right do:
if array[s1] <= array[s2] do:
temp[index] ← array[s1];
index ← index + 1;
s2 ← s2 + 1;
else do:
temp[index] ← array[s2];
index ← index + 1;
s2 ← s2 + 1;
while s1 <= mid do:
temp[index] ← array[s1];
index ← index + 1;
s2 ← s2 + 1;
while s2 <= right do:
temp[index] ← array[s2];
index ← index + 1;
s2 ← s2 + 1;
for I = 0 to temp.length do:
array[I + left] = temp[i];
function void mergesort(int[] array, int start, int end)
if start >= end return;
int mid = (start + end) >>> 1;
mergesort(array, start, mid);
mergesort(array, mid + 1, end);
merge(array, mid + 1, end);
O(n) =log2n
https://github.com/JessySnow/Algorithm/blob/master/src/T4/MergeSort.java
原文:https://www.cnblogs.com/jessysnow/p/14603845.html