亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript快速排序算法詳解

 更新時間:2014年12月03日 14:54:17   投稿:hebedich  
這篇文章主要介紹了Javascript快速排序算法的相關(guān)資料,需要的朋友可以參考下

快速排序是對冒泡排序的一種改進(jìn)。通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,最終達(dá)到整個數(shù)據(jù)變成有序序列。

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

復(fù)制代碼 代碼如下:

function partition(elements, low, high){
  //默認(rèn)將左側(cè)首元素作為基準(zhǔn)元素
  var base=elements[low];
  while(low < high){
    //從后往前搜索,直到找到比基準(zhǔn)元素小的元素,并進(jìn)行交換
    while(low < high && elements[high] >= base) high--;
    var swap1=elements[low];elements[low]=elements[high];elements[high]=swap1;
    //從前往后搜索,直到找到比基準(zhǔn)元素大的元素,并進(jìn)行交換
    while(low < high && elements[low] <= base) low++;
    var swap2=elements[low];elements[low]=elements[high];elements[high]=swap2;
  }
  //返回基準(zhǔn)元素的位置,作為序列的分割位置
  return low;
}
function sort(elements, low, high){
  if(low<high){
    //將序列一分為二,分為分割位置的前后序列,前序列比分割位置的值小,后序列比分割位置的值大
    var partitionPos=partition(elements, low, high);
    //對前序列繼續(xù)遞歸排序
    sort(elements, 0, partitionPos-1);
    //對后序列繼續(xù)遞歸排序
    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);

效率:

時間復(fù)雜度:最好:O(nlog2n),最壞:O(n^2),平均:O(nlog2n)。

空間復(fù)雜度:O(nlog2n)。

穩(wěn)定性:不穩(wěn)定。

相關(guān)文章

  • javascript學(xué)習(xí)筆記(十) js對象 繼承

    javascript學(xué)習(xí)筆記(十) js對象 繼承

    javascript學(xué)習(xí)筆記之js對象 繼承介紹,需要的朋友可以參考下
    2012-06-06
  • Javascript Objects詳解

    Javascript Objects詳解

    在JavaScript中,對象(Objects)是數(shù)據(jù)(變量),屬性和方法。 幾乎“一切”的JavaScript視為對象。日期,數(shù)組,字符串,函數(shù)的…在JavaScript中你也可以創(chuàng)建你自己的對象。
    2014-09-09
  • Javascript typeof與instanceof的區(qū)別

    Javascript typeof與instanceof的區(qū)別

    JavaScript 中 typeof 和 instanceof 常用來判斷一個變量是否為空,或者是什么類型的。但它們之間還是有區(qū)別的,需要的朋友可以參考下
    2016-10-10
  • javascript學(xué)習(xí)筆記(三)BOM和DOM詳解

    javascript學(xué)習(xí)筆記(三)BOM和DOM詳解

    本文應(yīng)用了很多實例,來解讀JavaScript中BOM和DOM,DOM是一個使程序和腳本有能力動態(tài)地訪問和更新文檔的內(nèi)容、結(jié)構(gòu)以及樣式的平臺和語言中立的接口。,而BOM定義了JavaScript可以進(jìn)行操作的瀏覽器的各個功能部件的接口。
    2014-09-09
  • JavaScript基礎(chǔ)函數(shù)整理匯總

    JavaScript基礎(chǔ)函數(shù)整理匯總

    這篇文章主要介紹了JavaScript基礎(chǔ)函數(shù)整理匯總,需要的朋友可以參考下
    2015-01-01
  • JavaScript學(xué)習(xí)筆記整理_關(guān)于表達(dá)式和語句

    JavaScript學(xué)習(xí)筆記整理_關(guān)于表達(dá)式和語句

    下面小編就為大家?guī)硪黄狫avaScript學(xué)習(xí)筆記整理_關(guān)于表達(dá)式和語句。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • js取得url地址參數(shù)實例

    js取得url地址參數(shù)實例

    js取得url地址參數(shù)實例,需要的朋友可以參考一下
    2013-02-02
  • Javascript中的數(shù)據(jù)類型之旅

    Javascript中的數(shù)據(jù)類型之旅

    JavaScript 是一種弱類型或者說動態(tài)語言。這意味著你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。這也意味著你可以使用同一個變量保存不同類型的數(shù)據(jù)。
    2015-10-10
  • 正則表達(dá)式(語法篇推薦)

    正則表達(dá)式(語法篇推薦)

    下面小編就為大家?guī)硪黄齽t表達(dá)式(語法篇推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 簡單了解JavaScript作用域

    簡單了解JavaScript作用域

    這篇文章主要介紹了JavaScript作用域的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論