1.归并排序(Merge Sort)
1.1简介

1.2归并排序--divide实现

1.3归并排序--merge

1.4 归并排序--merge细节

1.5归并排序--merge

1.6归并排序--merge--左边先结束

1.7归并排序右边先结束

1.8归并排序--merge实现

1.9归并排序--复杂度分析

1.10常见的递推式与复杂度

1.11代码
@Override protected void sort() { leftArray = (T[]) new Comparable[array.length >> 1]; sort(0, array.length); } // T(n) = T(n/2) + T(n/2) + O(n) /** * 对 [begin, end) 范围的数据进行归并排序 */ private void sort(int begin, int end) { if (end - begin < 2) return; int mid = (begin + end) >> 1; sort(begin, mid); sort(mid, end); merge(begin, mid, end); } /** * 将 [begin, mid) 和 [mid, end) 范围的序列合并成一个有序序列 */ private void merge(int begin, int mid, int end) { int li = 0, le = mid - begin; int ri = mid, re = end; int ai = begin; // 备份左边数组 for (int i = li; i < le; i++) { leftArray[i] = array[begin + i]; } // 如果左边还没有结束 while (li < le) { if (ri < re && cmp(array[ri], leftArray[li]) < 0) { array[ai++] = array[ri++]; } else { array[ai++] = leftArray[li++]; } } }
1.12作业
