归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn).

(一)算法实现

 1 private void merge_sort(int[] array, int first, int last) {
 2         if (first + 1 < last) {
 3             int mid = (first + last) / 2;
 4             merge_sort(array, first, mid);
 5             merge_sort(array, mid, last);
 6 
 7             // merge
 8             int i = first;
 9             int j = mid;
10             int[] tempArray = new int[last - first];
11             for (int k = 0; k < tempArray.length; k++) {
12                 if (j == last) {
13                     tempArray[k] = array[i++];
14                 } else if (i == mid) {
15                     tempArray[k] = array[j++];
16                 } else if (array[i] <= array[j]) {
17                     tempArray[k] = array[i++];
18                 } else if (array[i] > array[j]) {
19                     tempArray[k] = array[j++];
20                 } else {
21                     throw new RuntimeException("Merge sort error.");
22                 }
23             }
24             System.arraycopy(tempArray, 0, array, first, last - first);
25         }
26     }
Merge sort

相关文章: