<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時提出來的。

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

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

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

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

    舉例來說,現在有一個數據集{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 閱讀(174) 評論(0)  編輯  收藏 所屬分類: 算法
    主站蜘蛛池模板: 国产精品亚洲专区无码唯爱网| 亚洲精品高清国产一久久| 野花高清在线观看免费完整版中文| 免费看成人AA片无码视频吃奶| 久久性生大片免费观看性| 一级毛片免费在线观看网站| 一级毛片人与动免费观看| 欧洲美女大片免费播放器视频 | 丁香花免费完整高清观看| 波多野结衣在线免费观看| 成人女人A级毛片免费软件| 性色av无码免费一区二区三区| 国产精品视频永久免费播放| 国产美女精品视频免费观看| 免费又黄又爽的视频| 亚洲午夜无码片在线观看影院猛 | 在线看片人成视频免费无遮挡| 免费看的一级毛片| 四虎影在线永久免费观看| 亚洲女同成人AⅤ人片在线观看| 久久国产成人亚洲精品影院| 亚洲av伊人久久综合密臀性色| 中文字幕亚洲综合久久| 亚洲欧美日韩综合久久久| 老外毛片免费视频播放| 中文在线观看永久免费| 午夜网站在线观看免费完整高清观看 | 亚洲AV日韩精品一区二区三区 | 免费下载成人电影| 日本免费福利视频| 久久久久亚洲AV成人网人人网站| 亚洲级αV无码毛片久久精品| 亚洲福利秒拍一区二区| 亚洲av无码偷拍在线观看| 插鸡网站在线播放免费观看| **毛片免费观看久久精品| 国产资源免费观看| 亚洲另类激情综合偷自拍图| va天堂va亚洲va影视中文字幕| 欧洲美女大片免费播放器视频| 99在线在线视频免费视频观看|