首先我們來簡單的分析一下:
/思路框架
取數(shù)組的中間的數(shù)和前后進行比較,
然后建立左右兩個空數(shù)組,
比中間大的放在一邊,比中間小的放在一邊排截,
然后去循環(huán)遍歷
/步驟
1诺擅、構(gòu)建一個函數(shù)
2底哥、判斷數(shù)組的長度是否小于等于1脉漏,如果小于直接返回,不需要進行排序颗品,因為小于1肯尺,就是一個空數(shù)組,等于1數(shù)組里邊只有一個內(nèi)容
3躯枢、如果數(shù)組的長度大于1则吟,那么我們執(zhí)行操作
4、首先取到中間數(shù)的下標
5锄蹂、通過下標去找中的內(nèi)容
6氓仲、建立兩個空的數(shù)組
7、然后執(zhí)行for循環(huán)败匹,讓每一個數(shù)和中間數(shù)去進行比較
8寨昙、如果比中間數(shù) 小放在左邊,如果比中間數(shù)大放在右邊
9掀亩、把放在左邊數(shù)組舔哪、右邊數(shù)組和中間數(shù)用concat連接起來
接下來我們來看代碼及注釋:
var arr = [1,3,12,43,22,43,122,210]; //首先 var一個數(shù)組
function quicklySort ( brr ){
if(brr.length <= 1){ //當數(shù)組brr的長度 <= 1 的時候,以為這brr這個數(shù)組只有一個數(shù)或者是個空數(shù)組槽棍,那么久直接返回捉蚤,不需要往下進行
return brr
}
var centerIndex = Math.floor(brr.length / 2); //獲取中間數(shù)的下標
var centerNum = brr.splice(centerIndex,1)[0]; //通過中間數(shù)的下標來找中的數(shù)
var left = [],right = []; //建立左右兩個空的數(shù)組
for (var i = 0 ; i < brr.length ; i++){ //進行for循環(huán)
if(brr [i] < centerNum){ //當下標所對應(yīng)的數(shù)小于中間是數(shù)的時候,推入左邊數(shù)組的最后邊
left.push(brr[i])
}else{ //不符合條件的推入右邊數(shù)組的后邊
right.push(brr[i])
}
}
// console.log(left,right)
return quicklySort(left).concat([centerNum],quicklySort(right)) //用concat將左邊數(shù)組炼七、中間數(shù)和右邊數(shù)組連接起來
}
console.log(quicklySort ( arr))
這樣快速排列就很明了了吧