首頁 > web前端 > js教程 > Javascript快速排序演算法詳解_基礎知識

Javascript快速排序演算法詳解_基礎知識

WBOY
發布: 2016-05-16 16:29:14
原創
1407 人瀏覽過

快速排序是對冒泡排序的一種改進。透過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞歸進行,最終達到整個資料變成有序序列。

假設要排序的陣列是A[0]…A[N-1],首先任意選取一個資料(通常選用陣列的第一個數)作為基準數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。
一趟快速排序的演算法是:
1)設定兩個變數low、high,排序開始的時候:low=0,high=N-1;
2)以第一個陣列元素作為基準數據,賦值給base,即base=A[0];
3)從high開始向前搜索,即由後開始向前搜索(high--),找到第一個小於base的值A[high],將A[high]和A[low]互換;
4)從low開始向後搜索,即由前開始向後搜索(low ),找到第一個大於base的A[low],將A[low]和A[high]互換;
5)重複第3、4步,直到low=high;

複製程式碼 程式碼如下:

function partition(elements, low, high){
  //預設左側首元素作為基準元素
  var base=elements[low];
  while(low     //從後往前搜索,直到找到比基準元素小的元素,並進行交換
    while(low = base) high--;
    var swap1=elements[low];elements[low]=elements[high];elements[high]=swap1;
    //從前往後搜索,直到找到比基準元素大的元素,並進行交換
    while(low     var swap2=elements[low];elements[low]=elements[high];elements[high]=swap2;
  }
  //傳回基準元素的位置,作為序列的分割位置
  return low;
}
function sort(elements, low, high){
  if(low     //將序列一分為二,分為分割位置的前後序列,前序列比分割位置的值小,後序列比分割位置的值大
    var partitionPos=partition(elements, low, high);
    //對前序列繼續遞歸排序
    sort(elements, 0, partitionPos-1);
    //對後序列繼續遞歸排序
    sort(elements, partitionPos 1, high);
  }
}
var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
console.log('before: ' elements);
sort(elements, 0, elements.length-1);
console.log(' after: ' elements);

效率:

時間複雜度:最好:O(nlog2n),最壞:O(n^2),平均值:O(nlog2n)。

空間複雜度:O(nlog2n)。

穩定性:不穩定。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板