You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
快排的原理是基于二分法的思想,时间复杂度比较复杂,最好的情况是 O (N),最差的时候是 O (N^2),所以平时说的 ** O(N*logN) 为其平均时间复杂度。它的基本思想**是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
let pindex = Math.floor(arr.length / 2)
let m = arr.splice(pindex, 1)[0]
let left = []
let rigth = []
let i = 0
while (i < arr.length) {
if (arr[i] < m) {
left.push(arr[i])
} else {
rigth.push(arr[i])
}
i++
}
return quickSort(left).concat([m], quickSort(rigth));
}
Activity
[-]腾讯&字节校招:快排原理以及时间复杂度,并实现一个快排[/-][+]腾讯&字节:快排原理以及时间复杂度,并实现一个快排[/+][-]腾讯&字节:快排原理以及时间复杂度,并实现一个快排[/-][+]腾讯&字节:介绍一下快排原理以及时间复杂度,并实现一个快排[/+]7777sea commentedon Jun 24, 2020
快排的原理是基于二分法的思想,时间复杂度比较复杂,最好的情况是O(N),最差的时候是O(N^2),所以平时说的O(N*logN)为其平均时间复杂度。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
[-]腾讯&字节:介绍一下快排原理以及时间复杂度,并实现一个快排[/-][+]腾讯&字节&阿里:介绍一下快排原理以及时间复杂度,并实现一个快排[/+]woaixiangbao commentedon Mar 11, 2021
这个比作者写的好,简单,容易理解。
嗯,作者你这个为啥要写这么复杂呢,理解起来也很难
.....刚刚发现这个写法是阮一峰老师的博客中的。。。
JKCamus commentedon Apr 8, 2021
应该也算好理解吧
AAAngelina commentedon May 22, 2021
快排,什么时候是最好情况,时间复杂度为O(n)呢?
gemmi commentedon Oct 22, 2021
这个需要不断的新开数组,便于理解,但会有多余的时间和空间消耗,作者的版本是原地排序,没有多余的空间消耗,时间也更短。
edte commentedon Jan 14, 2022
已经排好序了就是 O(n),完全逆序就会退化到 O(n^2)
XW666 commentedon Mar 1, 2022
1AoB commentedon Aug 7, 2026
误导人,最好的事件复杂度是O(nlogn)