快速排序
- 基本思想:
- 我們首先在數(shù)組中選擇一個(gè)基準(zhǔn)點(diǎn)(一般我們選擇數(shù)組中間這一項(xiàng) Math.floor(ary.length/2))
- 拿基準(zhǔn)點(diǎn)和數(shù)組中的其他項(xiàng)進(jìn)行比較,比基準(zhǔn)點(diǎn)小的方法左邊收捣,比它大的放在右邊
- 以后每一邊都重復(fù)上述兩個(gè)操作旅敷,直到當(dāng)前這一邊只有一項(xiàng)的時(shí)候停止
下面上代碼
function quickSort(ary) {
if (ary.length <= 1) {
return ary;
}
var pointIndex = Math.floor(ary.length / 2);//找到基準(zhǔn)點(diǎn)索引
var pointValue = ary.splice(pointIndex, 1)[0];//找到基準(zhǔn)點(diǎn)的值,刪除掉窄刘,并拿出來(lái)瓜喇。此處是一個(gè)數(shù)組疯汁。因此還要取值[0]
// 接下來(lái)拿基準(zhǔn)值和數(shù)組進(jìn)行比較,把小于基準(zhǔn)值的放在基準(zhǔn)值的左邊地来,大的放在右邊
var left = [];
var right = [];
for (var i = 0; i < ary.length; i++) {
var cur = ary[i];
cur < pointValue ? left.push(cur) : right.push(cur);
}
return quickSort(left).concat([pointValue],quickSort(right)); //此處用到遞歸
}
var ary = [15, 13, 17, 11, 8, 20, 22];
var res = quickSort(ary);
console.log(res);
結(jié)果是:[8, 11, 13, 15, 17, 20, 22]
最后要說(shuō)的話:寫程序要注意細(xì)節(jié)戳玫,細(xì)節(jié)決定不了你知識(shí)的深度,但是細(xì)節(jié)能決定你的路有多遠(yuǎn)未斑!