最好时间复杂度可达O(n)
最差时间复杂度为O(n*logn)
平均时间复杂度为O(n*logn)
需要额外的O(n)空间
Pseudocode:
merge(arr, tmp, begin, end)
{
if (begin < endl) {
get middle
mergeSort(arr, tmp, begin, middle);
mergeSort(arr, tmp, middle, end);
merge(arr, tmp, begin, middle, end);
}
}
merge(arr, tmp, begin, middle, end)
{
compare the two part of tmp: [begin, middle], (middle, end]
lesser is inserted to the arr.
copy the rest into the arr
}
Java:
package ncku.cdc.sorting;
import java.util.Random;
public class MergeSort {
private int[] sequence;
public MergeSort(int size, int range) {
sequence = new int[size];
Random rand = new Random();
for (int i = 0; i < size; i++) {
sequence[i] = rand.nextInt(range);
}
}
public static void main(String[] args) {
int size = Integer.valueOf(args[0]);
int range = Integer.valueOf(args[1]);
MergeSort merge = new MergeSort(size, range);
System.out.println("before mergeSort:");
SortingTools.validation(merge.getSequence(), 0);
int[] tmp = new int[size + 1];
merge.mergeSort(merge.getSequence(), tmp, 0, size - 1);
System.out.println("after mergeSort:");
SortingTools.validation(merge.getSequence(), 0);
}
public void mergeSort(int[] arr, int[] tmp, int begin, int end) {
if (begin < end) {
int middle = ((begin + end) >> 1);
mergeSort(arr, tmp, begin, middle);
mergeSort(arr, tmp, middle + 1, end);
merge(arr, tmp, begin, middle, end);
}
}
private void merge(int[] arr, int[] tmp, int begin, int middle, int end) {
int i = begin;
int j = middle + 1;
int length = end - begin + 1;
int k = begin;
while (i <= middle && j <= end) {
if (arr[i] < arr[j]) { tmp[k++] = arr[i++]; }
else { tmp[k++] = arr[j++]; }
}
while (i <= middle) { tmp[k++] = arr[i++]; }
while (j <= end) { tmp[k++] = arr[j++]; }
for (int idx = 0; idx < length; idx++, end--) {
arr[end] = tmp[end];
}
}
public int[] getSequence() {
return sequence;
}
}
程序输出:
before mergeSort:
148 44 2 47 33 89 11 131 104 123 188 159 112 139 73 148 15 139 142 94 65 41 191 19 188 141 59 98 122 67 190 56 180 164 106
after mergeSort:
2 11 15 19 33 41 44 47 56 59 65 67 73 89 94 98 104 106 112 122 123 131 139 139 141 142 148 148 159 164 180 188 188 190 191