归并排序(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 }