快速排序原理
快速排序的基本思想是选取一个基准值将排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分都要小,然后对分割出来的这两部分分别再次进行类似的操作,整个排序过程递归进行到最基础的情形,然后进行合并操作,最终对所有数据完成排序。其核心就是递归划分。
JS实现
function quickSort(array){
let tempArray = Array.from(array); // 为了不改变原始数组,所以复制一份,在复制的数组上操作
let len = tempArray.length;
// 最基本情形,直接返回
if(len <= 1) {
return tempArray;
}
let pivotIndex = Math.round(len / 2); // 选取基准,这个可以随意取,一般取中间位置
let piovt = tempArray.splice(pivotIndex, 1); // 基准值
let left = [], right = [], i;
// 将除基准值之外的数据进行分割
// 注意: len需要减1,因为基准值单独拿出来了,即将它从要排序的数据中删除了
for(i = 0, len -= 1; i < len; i++) {
if(tempArray[i] < piovt) {
left.push(tempArray[i]);
} else {
right.push(tempArray[i]);
}
}
// 递归地进行分割,最后把它们跟基准值一起拼接成已排好序的
return quickSort(left).concat(piovt, quickSort(right));
}
// 测试排序
let test = [2, 5, 1, 8, 0, 3, 1, 0, 9, 23,2, 7];
let result = quickSort(test);
console.log(result);
console.log(test);
快排JS实现
网友评论