JavaScript----快速排序算法(Quciksort)实现

JavaScript—-快速排序算法(Quciksort)实现

先来阮大哥的教程。简单易懂,初入JS的最好学习圣地
http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html

快速排序算法的思想

  • 在数据集中选择一个元素作为基准。
  • 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。
  • 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
    举例:[85, 24, 63, 45, 17, 31, 96, 50],怎么进行排序呢?
  • 第一步 选择中间元素45,作为“基准”。
    这里写图片描述
  • 第二步。按照顺序将每个值都与“基准”比较,形成两个子集,比”基准”小的值放在左边,比“基准”大的值放在右边。
    这里写图片描述
  • 第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
    这里写图片描述

下面用JS代码来实现这一思想过程

var myArr = [85, 24, 63, 45, 17, 31, 96, 50];
    function quickSort(arr){
        if (arr.length <= 1){
            return arr;
        }//如果数组的长度<1,就直接返回数组
        var left = [];//左边的数组
        var right = [];//右边的数组
        var pivotIndex =Math.floor(arr.length / 2);//选基准,floor()方法为向下取整
        var pivot = arr.splice(pivotIndex,1);//基准数组
        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));//使用递归不断重复这个过程,就可以得到排序后的数组。
    }

    var a = quickSort(myArr);
    console.log(a);

在使用时,直接调用quickSort()方法即可。

猜你喜欢

转载自blog.csdn.net/yufanhui/article/details/81291397