JS快速排序

      从数组中选取一个数据作为基准,一般默认数组中第一个数据,然后比基准小的放到左侧,比基准大的放到右侧完成第一轮后分割出两组数组,左边永远比右边小,依次再进行分割直到只剩下一个数据无法分割返回。

第一种排序方法

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));
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易...
    aermin阅读 8,574评论 0 6
  • 首先了解什么是快速排序。 1、找到一个基准值(一般是中间位)2、然后将数组的值与基准值比较,分为两个数组(比基准值...
    TsingXu阅读 2,790评论 0 0
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,592评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,087评论 0 15
  • 沙子的自由 风无法囚禁住他 愚蠢的海浪也不能 和风一样愚蠢 自信的神 不了解他们自己 除非他们首先失去自己 然后沙...
    瓦尔登野人阅读 2,571评论 0 0