快速排序
是一个效率较高的排序算法,每一轮都会把比基准数小的放左边,比基准数大的放右边,本文章只是记录一下过程
盗用一张图来看看过程
废话不多说,这篇文章主要来记录下我实现的过程
var list = [6,5,5,10,24,2,4];
function quickSort(list,left,right){
if(left < right){
pivotIndex = partition(list,left,right);
quickSort(list,left,pivotIndex - 1);
quickSort(list,pivotIndex + 1 ,right);
}
return list;
}
function partition(list ,left,right){
pivot = list[left];
while( left < right){
while(list[right] > pivot && left < right){
--right;
}
list[left] = list[right];
while(list[left] <= pivot && left<right){
//list[left] <= pivot 这里需要满足等于的条件,因为如果存在相等的数,
//left将永远不会大于right,所以要加上等于的情况,
//left<right这个条件很重要,因为如果满足list[left] <= pivot这个后left会++,
//此时有可能 left>right,如果不加的话可能会死循环
++left;
}
//这里我发现有些文章没有做判断,因为有可能左右相等,所以没必要交换
if(list[right] != list[left]){
list[right] = list[left];
}
}
list[left] = pivot;
return left;
}
console.log(quickSort(list,0,list.length - 1))
我也参考了这些文章的写法
快速排序
漫画:什么是快速排序?
之前一直不明白,后来查了资料,自己算是明白怎么回事了,算法还是得自己手动实现一遍才能懂。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。