快排
- 确定分界点 q[l]
- 调整区间(左边区间的值小于分界点对应的值,右边区间的值大于分界点对应的值)
递归处理左右两段
//快排模板private static void quickSort(Integer[] arr, int l, int r) {if (l >= r) return;//分界点int x = arr[l];//定义两个指针int i = l - 1;int j = r + 1;while (i < j) {//分区do i ++; while (arr[i] < x);do j --; while (arr[j] > x);if (i < j) swap(arr, i, j);}//递归处理左右两边quickSort(arr, l, j);quickSort(arr, j + 1, r);}
归并排序
确定分界点:mid= (l + r) / 2
- 递归排序
归并-合二为一
//归并排序模板private static void mergeSort(Integer[] q, int l, int r) {if (l >= r) return;//确定分界点int mid = l + r >> 1;int i = l;int j = mid + 1;int k = 0;//递归排序mergeSort(q, l, mid);mergeSort(q, mid + 1, r);//归并-合二为一while (i <= mid && j <= r)if (q[i] < q[j]) temp[k ++] = q[i ++];else temp[k ++] = q[j ++];while (i <= mid) temp[k ++] = q[i ++];while (j <= r) temp[k ++] = q[j ++];//赋值for (i = l, j = 0; i <= r; i ++, j ++) q[i] = temp[j];}
