[数据结构学习笔记21] 快速排序(Quicksort)
快速排序(Quicksort)真的很快,因为它用了分而治之的思想。
基本思想:
1. 选一个中间点的值作为中心点(pivot)
2. 以中心点为基准
2.1 小于中心点的值,放中心点左边
2.2 大于中心点的值,放中心点右边
3. 对左右数列,重复1,2,最终会得到排好序的数列。
数列举例
4,10,7,3,5,12,40,1,33
中间的数取5(pivot)
第一轮排序
1,4,3,5,12,40,33,10,7
第二轮排5左右两边的数列
1,4,3,5,12,40,33,10,7
1,3,4,5,12,10,7,33,40
第三轮
1,3,4,5,12,10,7,33,40
1,3,4,5,7,10,12,33,40
代码实现(javascript)
function quickSortHelper(arrayInput, left, right) { let i = left; let j = right; let pivotPoint = arrayInput[Math.round((left + right) / 2)]; // loop while (i <= j) { while (arrayInput[i] < pivotPoint) { i++; } while (arrayInput[j] > pivotPoint) { j--; } if (i <= j) { let tempStore = arrayInput[i]; arrayInput[i] = arrayInput[j]' i++; arrayInput[j] = tempStore; j--; } } if (left < j) { quickSortHelper(arrayInput, left, j); } if (i < right) { quickSortHelper(arrayInput, i, right); } return arrayInput; } function quickSort(input) { return quickSortHelper(input, 0, input.length - 1); }
调用
let myData = [24, 10, 17, 9, 5, 9, 1, 23, 300];
quickSort(myData);
性能分析
场景 | 时间复杂度 | 空间复杂度 |
最好 | O(n log n) | O(log n) |
最坏 | O(n^2) | O(1) |
平均 | O(n log n) | O(log n) |
最好情况:中间点选择正好把数列平均分开,每次基本上都是一半对一半,这样有log(n)次递归,每次递归要遍历n个元素,所以复杂度为O(n log n)。
平均情况:和最好情况类似。
最坏情况:每次pivot选择的都是最大或者最小,导致分区极不均衡,这种情况下为O(n^2)。
快速排序不是稳定排序。这意味着,相同值的元素的位置在排序过程中可能会变化。
标签:
数据结构笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验