JavaScript实现快速排序(填坑法)

快速排序的基本思想:

基本思想是通过一趟排序将要排序的数据分割成为独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后在按照此方法对这两部分数据分别进行快速排序,整个过程都可以递归进行,以此来达到整数变成有序序列
代码实现:

// 快速排序 代码实现
function quickSort (array, start,end){
    let length = array.length;
    // 如果不是数组或者数组长度小于等于1 直接返回,不需要排序
    if(!Array.isArray(array) || length <= 1 || start  >= end ) return;

    let index =  partition (array,start, end); // 将数组划分为两部分,并返回右部分的第一个元素的索引值
    quickSort(array,start,index - 1);// 递归排序左半部分
    quickSort(array,index + 1 ,end); //递归排序右半部分
}
function partition(array,start,end){
    let pivot = array[start];//取得第一个值为枢纽值,获取枢纽值得大小

  // 当start等于end指针时结束循环
  while (start < end ){
        // 当end指正指向的值大于等于枢纽值得时候,end指针向前移动
     while(array [end] >= pivot && start < end){
        end--;
    }
    // 将比枢纽值小的值交换到start的位置
    array[start] = array[end];
    // 移动start值,当start指针指向的值小于枢纽值得时候  start指针向后移动
    while(array[start] < pivot && start < end){
        start ++;

    }
    // 将比枢纽值打的值交换到end位置,进入下一次循环中
    array[end ]= array [start];

  }
  // 将枢纽值交换到中间点
  array[start] = pivot;
  //返回中间索引值
  return start;
}

这一种方法是填空发 就是 将第一个位置的数作为枢纽值,然后end指正向前移动,当遇到比枢纽值小的值或者end值等于start值的时候就停止,然后 把这个值填入start的位置。然后start指针向后移动,当遇到比枢纽值大的值或者start值等于end值的时候停止,然后将这个值填入end的位置,反复循环这个过程,知道start的值等于end的值为止,将一开始保留的这个枢纽值填入这个位置,次数枢纽值左边的值都比枢纽值小,枢纽值右边的值都比枢纽值大,然后在递归左右两边的序列。
参考文章:
[算法] 关于快速排序的四种写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十九万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值