1.思想:快速排序思想:先找到一個(gè)基準(zhǔn)點(diǎn)(一般指數(shù)組的中部)窿撬,然后數(shù)組被該基準(zhǔn)點(diǎn)分為兩部分,依次與該基準(zhǔn)點(diǎn)數(shù)據(jù)比較,如果比它小疆柔,放左邊咒精;反之,放右邊旷档。
左右分別用一個(gè)空數(shù)組去存儲(chǔ)比較后的數(shù)據(jù)模叙。最后遞歸執(zhí)行上述操作,直到數(shù)組長度<=1;
2.特點(diǎn):快速彬犯,常用向楼。缺點(diǎn)是需要另外聲明兩個(gè)數(shù)組,浪費(fèi)了內(nèi)存空間資源谐区。
let array=[10,20,9,8,79,65,100];
var times=0;
var quickSort=function(arr){
//如果數(shù)組長度小于等于1無需判斷直接返回即可
if(arr.length<=1){
return arr;
}
var midIndex=Math.floor(arr.length/2);//取基準(zhǔn)點(diǎn)
var midIndexVal=arr.splice(midIndex,1);//取基準(zhǔn)點(diǎn)的值,splice(index,1)函數(shù)可以返回?cái)?shù)組中被刪除的那個(gè)數(shù)arr[index+1]
var left=[];//存放比基準(zhǔn)點(diǎn)小的數(shù)組
var right=[];//存放比基準(zhǔn)點(diǎn)大的數(shù)組
//遍歷數(shù)組湖蜕,進(jìn)行判斷分配
for(var i=0;i<arr.length;i++){
if(arr[i]<midIndexVal){
left.push(arr[i]);//比基準(zhǔn)點(diǎn)小的放在左邊數(shù)組
}
else{
right.push(arr[i]);//比基準(zhǔn)點(diǎn)大的放在右邊數(shù)組
}
console.log("第"+(++times)+"次排序后:"+arr);
}
//遞歸執(zhí)行以上操作,對左右兩個(gè)數(shù)組進(jìn)行操作,直到數(shù)組長度為<=1宋列;
return quickSort(left).concat(midIndexVal,quickSort(right));
};
console.log(quickSort(array));