快排算法图解,看完不会你捶我!!!

快排算法图解(JS)

步骤:
1,让第一个数6,成为基准值,然后准备2个指针,从数组两端开始往中间探测
2,士兵j先动(注意是j先动),一步一步往左,j - - ,遇到小于基准值6的数,停下不动,士兵i一步一步往右移动,i + +,遇到大于基准值6的数,停下不动,两个士兵的值进行交换
3,交换完成,两个士兵继续前进

在这里插入图片描述

步骤:

4,第一次交换完成后,遇到第二次交换,i对应值9,j对应值4,进行交换

5,i,j两士兵在值3处相遇,于是两士兵都停下来

6,将基准值6与相遇处的值进行交换

在这里插入图片描述

步骤:

7,第一轮探测结束,以基准数6为分界点,6左边的数小于6,6右边的数大于6,将数组拆分成两个数组,左边的是[3, 1, 2, 5, 4],右边的是[9, 7, 10, 8]

8,按之前的方法处理两个数组,第一个数为基准值

9,直到不可拆分出新的子数组为止

在这里插入图片描述
上代码:

var arr1 = [6,1,2,7,9,3,4,5,10,8];
quickSort(arr1,0,arr1.length-1);
    
function quickSort(arrs:number[],start:number,end:number) {
     if(start > end) return;
     var i:number = start;
     var j:number = end;
     var pivot:number = arrs[start];
     while(i != j){
         while(arrs[j] >= pivot && j > i) j--;
         while(arrs[i] <= pivot && i < j) i++;
         if(i < j){
             swaper(i,j,arrs);
         }
     }
     arrs[start] = arrs[i];
     arrs[i] = pivot;
     quickSort(arrs,start,i-1);
     quickSort(arrs,i+1,end);
     return;
 }

function swaper(i:number,j:number,arr:number[]) {
     var temp:number = arr[i];
     arr[i] = arr[j];
     arr[j] = temp;
 }

图片思路参考《啊哈!算法》一书,推荐这本算法入门书籍

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值