荷兰国旗问题来改进快速排序------排序4
2019-01-31 18:38
155 查看
随机快速排序的细节和复杂度分析
可以用荷兰国旗问题来改进快速排序
时间复杂度O(N*logN),额外空间复杂度O(logN)
具体代码如下:
[code]public static void quickSort(int[] arr) { if (arr == null || arr.length < 2) { return; } quickSort(arr, 0, arr.length - 1); } public static void quickSort(int[] arr, int l, int r) { if (l < r) { swap(arr, l + (int) (Math.random() * (r - l + 1)), r); int[] p = partition(arr, l, r); quickSort(arr, l, p[0] - 1); quickSort(arr, p[1] + 1, r); } } public static int[] partition(int[] arr, int l, int r) { int less = l - 1; int more = r; while (l < more) { if (arr[l] < arr[r]) { swap(arr, ++less, l++); } else if (arr[l] > arr[r]) { swap(arr, --more, l); } else { l++; } } swap(arr, more, r); return new int[] { less + 1, more }; } public static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
加粗部分的解释
最坏的时间复杂度:
最好的时间复杂度:
空间复杂度
相关文章推荐
- 荷兰国旗问题--快速排序的变种
- 荷兰国旗问题--快速排序的变种
- 算法初级02——荷兰国旗问题、随机快速排序、堆排序、桶排序、相邻两数的最大差值问题、工程中的综合排序算法
- 荷兰国旗排序问题对应的快速排序方法
- 算法初级02——荷兰国旗问题、随机快速排序、堆排序
- 三色排序问题/(荷兰国旗问题)(C++版)
- 奇偶数排序,荷兰国旗问题
- 查找排序实战---荷兰国旗问题(leetcode 75)
- 中位数应用:输油管道问题--快速排序、改进、变种
- 荷兰国旗快速排序及堆排序
- 快速排序的两种改进方法算法及topK问题求解
- 数组------荷兰国旗问题(颜色排序)
- 排序相关——荷兰国旗问题
- 荷兰国旗问题(三元素数组排序问题)
- 荷兰国旗问题(三元素数组排序问题)
- 三色排序(荷兰国旗问题)
- 算法--三色排序(经典的荷兰国旗问题)
- 荷兰国旗问题
- NYOJ268 荷兰国旗问题
- 荷兰国旗问题