JavaScript快速排序

快速排序算法思想:

快速排序使用分治法递归思想来进行操作。分治分治就是分而治之,把大问题化为小问题再进行求解。

首先,给定一个数组,让我们来对数组中的元素进行排序,那么我们的想法是首先选定一个元素element,通常选定第一个元素。每一轮排序的目的就是将element放在正确的位置上,也就是他的左边都小于他,右边都大于他。让我们来设置前后两个指针,指针left指向数组的第一个数,指针j指向数组的最后一个数。开始时,将element拿出来,这个位置就空下来了。先看指针j指向的数字,如果这个数字小于element就把指针j指向的数字放在空余的位置。指针j所指向的数字拿走了,就相当于把指针j的位置空下来了。这个时候就让指针i来走,找到比element大的数字,放到指针j指向的位置。依次交替行走。如果j所指向的数字是大于element的,就让j--,直到找到比element小的数字。当指针i与j相遇时,查找停止。最后将element放在i与j共同指向的位置上。

总结一下:

1、如果arr[j]>element,j--,否则交换

2、如果arr[i]<element ,i++,否则交换

3、j指针先走,交换后i指针走,j指针停。再交换后,i指针停,j指针走。直到相遇。

4、递归

代码:

let arr = [1, 5, 6, 2, 7, 3, 4, 0];
function quickSort(arr, left, right) {
//   确保数组有元素
if (left < right) {
    let element = arr[left],
    i = left,
    j = right;
    while (i < j) {
    // 查找到arr[j]>=element的时候j的值
    while (i < j && arr[j] >= element) {
        j--;
    }
    // 交换元素,将较小值arr[j]移到前面
    if (i < j) {
        arr[i++] = arr[j];
    }
    // 查找到arr[i]<=element的时候i的值
    while (i < j && arr[i] <= element) {
        i++;
    }
    // 将较大值arr[i]移到后面
    if (i < j) {
        arr[j--] = arr[i];
    }
    }
    arr[i] = element;
    //   递归再对element的左右进行排序
    quickSort(arr, left, i - 1);
    quickSort(arr, i + 1, right);
}
}
quickSort(arr, 0, arr.length - 1);
console.log(arr); // (8) [0, 1, 2, 3, 4, 5, 6, 7]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值