快速排序基於分治法的思想,每次劃分後讓樞軸左邊的全部小於等於它,右邊的大於等於它
function devide(a, l, r)
{
if(l == r) return a[l];
let pivot = a[l];
let i = l;
let j = r;
while(i < j){
while(i < j && a[j] >= pivot) j--;
if(i < j){
a[i] = a[j];
i++;
}
while(i < j && a[i] <= pivot) i++;
if(i < j){
a[j] = a[i];
j--;
}
}
a[i] = pivot;
if(i > l) devide(a, l, i-1);
if(i < r) devide(a, i+1, r);
return a;
}
function qsort(a)
{
return devide(a, 0, a.length-1);
}
console.log(qsort([1, -1, 3, 7, 0, 10]));
console.log(qsort([1, -1, 3, 7, 1, 10]));
思考:
快速排序之所以是不穩定的排序,就在於交換的過程中相等元素後面可能被換到前面去
本作品採用《CC 協議》,轉載必須註明作者和本文連結