快速排序
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"]);