JS快速排序

??????從數(shù)組中選取一個數(shù)據(jù)作為基準,一般默認數(shù)組中第一個數(shù)據(jù),然后比基準小的放到左側,比基準大的放到右側完成第一輪后分割出兩組數(shù)組,左邊永遠比右邊小,依次再進行分割直到只剩下一個數(shù)據(jù)無法分割返回。

第一種排序方法

function quickSort (array) {
    var size = array.length;
    function sort (start, end) {
        if(start >= end) return;
        var nonius = start;
        var flag = array[start];
        var j = end;
        while(nonius < j){
            for(;nonius < j; j--){
                if(flag > array[j]){
                    array[nonius] = array[j];
                    nonius++;
                    break;
                }
            }
            for(;nonius < j; nonius++){
               if(array[nonius] > flag){
                    array[j] = array[nonius];
                    break;
                }
            }
        }
        array[nonius] = flag;
        sort(start, nonius);
        sort(nonius+1, end);
    }
    sort(0, size);
    return array;
}

第二種排序方法

function quickSort (array) {
    var size = array.length;
    function sort (start, end) {
        if(start >= end) return;
        var nonius = start;
        var flag = array[start];
        for(var i = start;i < end; i++){
            if(flag > array[i]){
                array = array.slice(0, start).concat([array[i]], array.slice(start));
                array.splice(i+1, 1);
                nonius++;
            }
        }
        sort(start, nonius);
        sort(nonius + 1, end);
    }    
    sort(0, size);
    return array;
}

第三種排序方法

function quickSort (arr) {
    if(arr.length <= 1) return arr;
    var size = arr.length;
    var left = [];
    var right = [];
    var flag = arr[0];
    for(var i = 1; i < size; i++){
      if(arr[i] >= flag){
        right.push(arr[i])
      }
      if(arr[i] < flag){
        left.push(arr[i])
      }
    }
    return quickSort(left).concat([flag], quickSort(right));
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • tips:接下去會在github寫博客,簡書不再更新和修改文章,歡迎大家逛逛我的新博客點擊查看 ,我會盡量用更容易...
    aermin閱讀 3,312評論 0 6
  • 首先了解什么是快速排序。 1、找到一個基準值(一般是中間位)2、然后將數(shù)組的值與基準值比較,分為兩個數(shù)組(比基準值...
    TsingXu閱讀 355評論 0 0
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,220評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,743評論 0 15
  • 沙子的自由 風無法囚禁住他 愚蠢的海浪也不能 和風一樣愚蠢 自信的神 不了解他們自己 除非他們首先失去自己 然后沙...
    瓦爾登野人閱讀 337評論 0 0