<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 100  文章 - 50  trackbacks - 0
    <2013年4月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    我收藏的一些文章!

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    目前,最常見的排序算法大概有七八種,其中"快速排序"(Quicksort)使用得最廣泛,速度也較快。它是圖靈獎得主C. A. R. Hoare(1934--)于1960時提出來的。

    "快速排序"的思想很簡單,整個排序過程只需要三步:

      (1)在數據集之中,選擇一個元素作為"基準"(pivot)。

      (2)所有小于"基準"的元素,都移到"基準"的左邊;所有大于"基準"的元素,都移到"基準"的右邊。

      (3)對"基準"左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。

    舉例來說,現在有一個數據集{85, 24, 63, 45, 17, 31, 96, 50},怎么對其排序呢?

    第一步,選擇中間的元素45作為"基準"。(基準值可以任意選擇,但是選擇中間的值比較容易理解。)

    第二步,按照順序,將每個元素與"基準"進行比較,形成兩個子集,一個"小于45",另一個"大于等于45"。

    第三步,對兩個子集不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。

    下面參照網上的資料(這里這里),用Javascript語言實現上面的算法。

    首先,定義一個quickSort函數,它的參數是一個數組。

    var quickSort = function(arr) {

    };

    然后,檢查數組的元素個數,如果小于等于1,就返回。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

    };

    接著,選擇"基準"(pivot),并將其與原數組分離,再定義兩個空數組,用來存放一左一右的兩個子集。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

      var pivotIndex = Math.floor(arr.length / 2) ;

      var pivot = arr.splice(pivotIndex, 1)[0];

      var left = [];

      var right = [];

    };

    然后,開始遍歷數組,小于"基準"的元素放入左邊的子集,大于基準的元素放入右邊的子集。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

      var pivotIndex = Math.floor(arr.length / 2) ;

      var pivot = arr.splice(pivotIndex, 1)[0];

      var left = [];

      var right = [];

      for (var i = 0; i < arr.length; i++){

        if (arr[i] < pivot) {

          left.push(arr[i]);

        } else {

          right.push(arr[i]);

        }

      }

    };

    最后,使用遞歸不斷重復這個過程,就可以得到排序后的數組。

    var quickSort = function(arr) {

      if (arr.length <= 1) { return arr; }

      var pivotIndex = Math.floor(arr.length / 2);

      var pivot = arr.splice(pivotIndex, 1)[0];

      var left = [];

      var right = [];

      for (var i = 0; i < arr.length; i++){

        if (arr[i] < pivot) {

          left.push(arr[i]);

        } else {

          right.push(arr[i]);

        }

      }

      return quickSort(left).concat([pivot], quickSort(right));

    };

    使用的時候,直接調用quickSort()就行了。

    (完)

    posted on 2013-04-11 00:35 fly 閱讀(175) 評論(0)  編輯  收藏 所屬分類: 算法
    主站蜘蛛池模板: 成人嫩草影院免费观看| 亚洲一区二区三区久久久久| 日本亚洲欧美色视频在线播放| 免费观看无遮挡www的视频| 亚洲性天天干天天摸| 99热这里只有精品6免费| 亚洲AV日韩AV永久无码免下载| a级毛片在线免费观看| 亚洲AV日韩精品久久久久久| 可以免费观看的毛片| 337p欧洲亚洲大胆艺术| 97热久久免费频精品99| 亚洲人片在线观看天堂无码| 宅男666在线永久免费观看| 黄床大片30分钟免费看| 亚洲精品午夜无码专区| 100000免费啪啪18免进| 亚洲熟妇丰满xxxxx| 全部免费毛片免费播放| 国产一级一毛免费黄片| 亚洲另类激情综合偷自拍| 国产福利在线免费| 女bbbbxxxx另类亚洲| 亚洲av最新在线网址| 无码一区二区三区免费视频 | 亚洲av极品无码专区在线观看| 在线观看av永久免费| 日韩精品无码免费视频| 亚洲毛片在线观看| 国产成人综合久久精品免费| 久久精品免费观看| 波多野结衣亚洲一级| 亚洲人成网站色在线入口| 色欲色香天天天综合网站免费 | 超清首页国产亚洲丝袜| 99久久人妻精品免费一区| 特级一级毛片免费看| 亚洲男人第一av网站| 国产一级大片免费看| 蜜桃视频在线观看免费视频网站WWW| 亚洲人成未满十八禁网站|