其实快速排序很简单,只是对冒泡排序的一种改进。
快速排序的步骤:
1、找到数组的中间项,并把它移除
2、准备左右两个新数组,循环数组剩下的每一项,比中间数小的,放左边的数组中,比中间数大的放右边的数组中
3、以递归的方式将左右两边的数组持续这样处理,一直到左右两个数组都排好序为止,然后拼接(concat)
简单画了张图可能会更好理解一些:
话不多说,放代码:
//创建一个快速排序的数组
function quick(ary){
//4、结束递归,如果当前数组的长度小于等于1,则返回这个数组
if(ary.length<=0){
return ary
}
//1、找到数组的中间项,并把它移出
let middleIndex=Math.floor(ary.length/2)
let middleValue=ary.splice(middleIndex,1)[0]
//2、准备左右俩个个数组,循环剩下数组的每一项,比当前项小的放左边,反之放右边
let aryLeft=[]
let aryRight=[]
for(let i=0;i<ary.length;i++){
let item=ary[i]
if(item<middleValue){
aryLeft.push(item)
}else{
aryRight.push(item)
}
}
//3、递归方式上左右两边的数组持续这样处理,一直到左右两个数组排好序为止,然后拼接
return quick(aryLeft).concat(middleValue,quick(aryRight))
}
//创建一个数组
let arr=[12,8,15,16,24]
//调用快速排序的函数并赋值给arr2
let arr2=quick(arr)
//输出arr2
console.log(arr2)
此时,页面上显示的就是已经排好序的数组啦