仅仅提供代码实现,原理请问度娘。
快速排序是冒泡排序的升级版本,每次都确定一个数的排序后的位置。且将数组进行分治处理。
1、 数据和工具类
module.exports.list = [9, 3, 4, 32, 42, 3, 45, 33, 2, 76, 89, 34];
module.exports.swap = function (list, i, j) {
let temp = list[i];
list[i] = list[j];
list[j] = temp;
};
module.exports.display = function (list) {
let str = "";
for (let i = 0; i < list.length; i++) {
str += list[i] + ", ";
}
console.log(str.replace(/, $/, ""));
};
2、快速排序实现
/**
* 快速排序
*/
const { list, swap, display } = require("./utils/common");
function quickSort(list, start, end) {
//表示子数组部分排序完成,直接返回即可。
if (!list || start >= end) {
return;
}
//随机计算下标,对应的数被认定为基准数。
let pivot = start + Math.trunc(Math.random() * (end - start + 1));
console.log("基准数为: " + pivot + " ==>" + list[pivot]);
//将这个基准数交换到子数组的最后位置
swap(list, pivot, end);
let baseIndex = start - 1;
//开始移动元素,将基准数移到排序后的位置。同时按照基准数将大于和小于它的数分别放到两边。
for (let i = start; i <= end; i++) {
//只有发现了比基准数更小的数,baseIndex 才进行加1处理;
//且判断 baseIndex 是否指向的是一个大于基准数的数,如果是,那么就进行交换处理。
if (list[i] <= list[end]) {
baseIndex++;
if (i > baseIndex) {
å;
swap(list, i, baseIndex);
}
}
}
quickSort(list, start, baseIndex - 1);
quickSort(list, baseIndex + 1, end);
}
quickSort(list, 0, list.length - 1);
display(list);