快速排序、冒泡排序、数组全排列

快速排序

let a=[1,3,0,2,1,1,4]
 function _sort(arr,l,r){ //传入三个参数:数组,左右边界
     if(l>=r)return //!!递归返回条件
     let i=l,j=r,p=arr[l]  //新建两个移动指针
     while(i<j){ 
         while(i<j&&arr[j]>=p)j--  //先从右->左,找到第一个比p小的,赋值给门卫p
        arr[i]=arr[j]
         while(i<j&&arr[i]<=p)i++  //再从左->右,找到第一个比p大的,赋值给无用了的j的位置
        arr[j]=arr[i]
        arr[i]=p //将p放在无用了的i的位置
     }
     _sort(arr,l,i-1)  //递归左右,这里用到原边界,所以上面才另外定义了两个指针i,j
     _sort(arr,i+1,r)
 }
 _sort(a,0,a.length-1)
 console.log(a)

冒泡排序

let a=[6,5,4,3,2,1]
 function _sort(arr){
     for(let i=0;i<arr.length;i++){ //i 的起止范围 [ 0,arr.length)
         for(let j=0;j<arr.length - 1 - i;j++){  //j的起止范围 [0,arr.length-1-i]
            if(arr[j]>arr[j+1]){
                [arr[j],arr[j+1]]=[arr[j+1],arr[j]]
            }
         }
     }
 }
 _sort(a)
 console.log(a)

全排列

function perm(arr) { 
    function fn(n) { //为第n个位置选择元素 
        for(var i=n;i<arr.length;i++) { 
            ;[arr[i],arr[n]]=[arr[n],arr[i]]
            if(n+1<arr.length-1) //判断数组中剩余的待全排列的元素是否大于1个 
                fn(n+1); //从第n+1个下标进行全排列 
            else
                console.log(arr) 
            ;[arr[i],arr[n]]=[arr[n],arr[i]] 
        } 
    }
    fn(0); 
} 
perm(["e1","e2","e3"]); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值