JS实现快速排序

//交换位置函数
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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值