//快速排序:选定一个数,将数组中比他大的放在左边,比他小的放在右边;
// 那么该趟排序中,就确定了选定数字的位置;我们在对左边和右边进行递归排序,最终所有位置都确定
function quickSort(arr){
//用于交换的函数
function swap(arr,idx1,idx2){
let tmp=arr[idx1]
arr[idx1]=arr[idx2]
arr[idx2]=tmp
}
//用于排序的函数
//数组 排序部分前置索引 排序部分后置索引
function quick(arr,pre,last){
//递归终止条件【数组长度小于等于1】
if (last-pre<1){
return
}
let base=arr[pre]//选取基准
let i=pre;
let j=last
while (true){
//寻找比基准小的位置
for (i;i<=last;i++){
if (arr[i]>base){
break
}
}
//寻找比基准大的位置
for (j;j>pre;j--){
if (arr[j]<base){
break
}
}
if (i<j){
//如果i,j没有交叉则交换
swap(arr,i,j)
}else {
//i,j交叉了说明只需要进行基数位置和最后一个比他小的位置【即当前j的位置】交换
swap(arr,pre,j)
break
}
}
//前半部分递归排序
quick(arr,pre,j-1)
//后半部分递归排序
quick(arr,j+1,last)
}
//调用排序函数
quick(arr,0,arr.length)
}
//测试
let arr=[6,4,2,8,1,3,100,0]
quickSort(arr)
console.log(arr);
6.快速排序
于 2021-10-16 13:04:04 首次发布