排序算法

快速排序

  思想:

    1、找到一个基准点

      2、建立两个数据,分别存放左边和右边的数组

    3、利用递归的原理进行比较

  arr = [1,6,3,4,5]

  步骤 :  1,6,3,4,5

             136,4,5

             1,3,46,5

             1,3,4,5,6

    <script type="text/javascript">
        var arr = [1,6,3,4,5];
        alert(quickSort(arr));

        function quickSort(arr) {

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

            var middleIndex = Math.floor(arr.length/2);
            var middleNum = arr.splice(middleIndex,1);
            var left = [];
            var right = [];

            
            


            for (var i=0,len=arr.length;i<len;i++) {
                if (arr[i]<middleNum) {
                    left.push(arr[i]);
                } else {
                    right.push(arr[i]);
                }
            }
            return quickSort(left).concat([middleNum],quickSort(right));

        }
    </script>

注意:

  1、if (arr.length<=1) return arr;  必须在arr.splice(middleIndex,1)前面,如果在后面会有问题,执行arr.splice(middleIndex,1)会影响arr的值,再返回arr值不对。

      2、if (arr.length<=1) return arr;必须是<=,如果改成==,会有问题,因为有可能在排序的时候,出现left或者right为空数组的情况(见:步骤3,这时left为空数组),空数组长度0,这时判断不成立,程序会报错了。

  

参考:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html

原文地址:https://www.cnblogs.com/joya0411/p/3740077.html