JavaScript 实现快速排序
简介
排序算法 | 时间复杂度 | 是否基于比较 |
---|---|---|
冒泡、插入、选择 | O(n²) | √ |
快排、归并 | O(nlogn) | √ |
桶、计数、基数 | O(n) | × |
快速排序,在一组数据中,找到一个分区点 pivot,然后根据 pivot 将数据分为两半,随后递归的进行分区操作,直到区间为缩小为 1 ,数据就全部有序了。
代码
function quickSort(arr, left, right) { if (left >= right) return let pivot = right let partitionIndex = partition(arr, pivot, left, right) quickSort(arr, left, partitionIndex - 1) quickSort(arr, partitionIndex + 1, right) } function partition(arr, pivot, left, right) { const pivotVal = arr[pivot] let startIndex = left for (let i = left; i < right; i++) { if (arr[i] < pivotVal) { swap(arr, i, startIndex) startIndex++ } } swap(arr, startIndex, pivot) return startIndex } function swap(arr, i, j) { const temp = arr[i] arr[i] = arr[j] arr[j] = temp } const arr = [6, 11, 3, 9, 8] quickSort(arr, 0, arr.length - 1) // [3, 6, 8, 9, 11]
动画演示
总结
- 时间复杂度是 O(nlogn),空间复杂度是 O(1),排序过程是不稳定的。
- 快排利用了分治思想,它的处理是由上到下的,先划分数据,再递归的处理。
- 它相比归并排序的优势在于,是个原地排序算法,解决了占用太大内存的问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论