js快速排序

 思路:

1、通过下标取中间数为基数;

2、从起点往后寻找比基数大的,记录为下标 i;再从终点往前寻找比基数小的,记录为下标 j,当 i <= j时,原地交换数值;

3、重复步骤2,直到遍历所有元素,并记录遍历的最后一个下标 i,以此下标为分界线,分为左右两边,分别重复步骤1~3实现递归排序;

实现:

 

    var devide = function (array, start, end) {

        if(start >= end) return array;

        var baseIndex = Math.floor((start + end) / 2), // 基数索引

             i = start,

             j = end; 

        while (i <= j) {

            while (array[i] < array[baseIndex]) {

                i++;

            }

            while (array[j] > array[baseIndex])  {

                j--;

            }

            if(i <= j) {

                var temp = array[i];

                array[i] = array[j];

                array[j] = temp;

                i++;

                j--;

            }

        }

        return i;

    }

    var quickSort = function (array, start, end) {

        if(array.length < 1) {

            return array;

        }

        var index = devide(array, start, end);

        if(start < index -1) {

            quickSort(array, start, index - 1);

        }

        if(end > index) {

            quickSort(array, index, end);

        }

        return array;

    }

posted @ 2021-04-16 17:18  浣熊sky  阅读(211)  评论(0编辑  收藏  举报