//交换位置函数
function change(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
const arr = [6, 1, 2, 7, 9, 3, 4, 5, 5, 5, -5, 5, 10, 8];
function quickSort(arr, i, j) {//要排序的数组,起始位置 终止位置
let start = i, end = j;
let x = arr[start];//选择第一个数作为基准
while (i < j) {
while (arr[j] >= x && start < j) {
j--;//先从右往左查找到小于基准的数,位置是j
}
while (arr[i] <= x && i < end) {
i++;//从左往右查找大于基准的数,位置是i
}
if (arr[i] > x && arr[j] < x && i < j) {
change(arr, i, j);//如果同时满足上面的条件,并且i在j左面 就交换位置
}
}
change(arr, start, j);//j最后停的位置就是基准数应该在的地方,左面都比它小,右面都比它大
if (j - 1 - start >= 1) {//如果基准数的上一个和每次的起始位置数据数量多于1,循环调用
arguments.callee(arr, start, j - 1);
}
if (end - (j + 1) >= 1) {//同上,右面的数据多余1,递归调用,只有一个数据默认有序
arguments.callee(arr, j + 1, end);
}
return
}
quickSort(arr, 0, arr.length - 1);
console.log(arr);
JS实现快速排序
最新推荐文章于 2024-08-03 21:38:43 发布