该文章用来记录对快排的理解,方便回忆
function quickSort(arr, left, right) {//left和right代表所要进行对比区间
var len = arr.length,
partitionIndex,
left = typeof left != 'number' ? 0 : left,
right = typeof right != 'number' ? len - 1 : right;//设置初始首尾下标
if (left < right) {//直到
partitionIndex = partition(arr, left, right);//返回已排序好的基准值准确位置下标
quickSort(arr, left, partitionIndex - 1);//对已排序好的基准值准确位置下标的左侧进行排序,partitionIndex - 1代表现基准的左侧元素下标
quickSort(arr, partitionIndex + 1, right);//和上面相反
}
return arr;
}
function partition(arr, left, right) { //分区操作
var pivot = left, //设定基准值(pivot)
index = pivot + 1;
for (var i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) {
swap(arr, i, index);//从已左排序的相邻数开始渐进赋值小于基准值的元素,相当于把所有小于基准值的统统按顺序紧挨着基准值放右边
index++;//记录符合要求的元素所应该排的位置,当循环完毕后的index意味着基准值所该排的位置
}
}
swap(arr, pivot, index - 1);//最后把一堆小于基准值中的倒数第一的元素与基准值交换,把基准值放到准确位置(固定不再改变),即index-1
return index - 1;//当前基准值的下标
}
function swap(arr, indexA, indexB) {
[arr[indexA], arr[indexB]] = [arr[indexB], arr[indexA]];
}
// test
const arr = [9,91, 65, 10, 65, 6, 30, 8,7];
console.log(quickSort(arr));
排序函数来自www.jianshu.com/p/1b4068ccd… ,对其中的快排做分析,原作者的各种排序算法罗列值得一看,并附有生动形象的图片,方便理解

var quicksort = function (arr) {
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);//取一个基准值,用于做参考点(不一定要用这个,像上面,以左侧做基准值)
var pivot = arr.splice(pivotIndex, 1)[0];
var left = []; var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else { right.push(arr[i]); }
}
return quicksort(left).concat([pivot], quicksort(right));//但开了三个线处理,性能上有缺陷
}