這里我們將介紹一種中間排序算法:快速排序??焖倥判蚴菍γ芭菖判虻囊环N改進(jìn),它是由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,以此達(dá)到整個數(shù)據(jù)變成有序序列。
簡單的說,快速排序就是在數(shù)組中找一個基準(zhǔn)值,比基準(zhǔn)值大的為一組,比基準(zhǔn)值小的為另外一組,再分別對每組進(jìn)行快速排序,直到所有值都依照一定順序進(jìn)行排列為止。下面讓我們通過一個簡單的例子來了解快速排序:
數(shù)組[6,1,2,7,9,3,4,5,10,8]
第一趟:
我們選擇6(隨機選取)為基準(zhǔn)值,則根據(jù)基準(zhǔn)值,數(shù)組經(jīng)過第一次排序后,可以分成
[3,1,2,5,4],6,[9,7,10,8]
第二趟:
我們對[3,1,2,5,4]進(jìn)行快速排序,依然隨機選擇一個基準(zhǔn)值,假設(shè)3為基準(zhǔn)值,則第二趟排序后結(jié)果為
[1,2],3,[5,4]
...
這樣,經(jīng)過不斷的分組,排序,我們最終就得到了一個有序數(shù)組
快速排序是一種非常有效的排序方法,平均提供O(nlog(n))性能。它也比較容易實現(xiàn)??焖倥判?qū)儆谝环N流行,有用,高效的排序方法。
var array = [];
(function createArray(size) {
array.push(+(Math.random() * 100).toFixed(0));
return (size > 1) ? createArray(size - 1) : undefined;
})(12);
function quickSort(array) {
// change code below this line
if (array.length<=1) {
return array
}
var arrayIndex=Math.floor(array.length/2)//選取基準(zhǔn)點
var arr=array.splice(arrayIndex,1)//基準(zhǔn)值
var left=[],right=[];
//遍歷數(shù)組進(jìn)行分配
for (var i = 0; i < array.length; i++) {
if(array[i]>arr){
right.push(array[i]);
}else{
left.push(array[i]);
}
}
var result=quickSort(left).concat(arr,quickSort(right))//遞歸操作
// change code above this line
return result;
}
quickSort(array)
更多建議: