题解 | #快速排序#

快速排序

https://www.nowcoder.com/practice/38da660199d0400580ac3905c05f5bd6

希尔排序

 const quickSort= (arr) => {

      // 设置步长(间隔)  4

      for (

        var gap = Math.floor(arr.length / 2);

        gap > 0;

        gap = Math.floor(gap / 2)

      ) {

        console.log(gap, "一、步长");

        for (var i = gap; i < arr.length; i++) {

          console.log(i, "二、找到的元素");

          for (var j = i - gap; j >= 0 && arr[j] > arr[gap + j]; j -= gap) {

            console.log("三、当前元素a" + arr[j], "当前元素b", arr[gap + j]);

            var ret = arr[j];

            arr[j] = arr[gap + j];

            arr[gap + j] = ret;

          }

        }

      }

      return arr;

    };

数组中间值比较排序

const _quickSort = (array) => {

      if (array.length === 0 || array.length === 1) return array;

      let baseIndex = Math.floor(array.length / 2);

      let base = array.splice(baseIndex, 1);

      let left = [];

      let right = [];

      for (let i = 0; i < array.length; i++) {

        if (array[i] <= base) {

          left.push(array[i]);

        } else {

          right.push(array[i]);

        }

      }

      return _quickSort(left).concat(base, _quickSort(right));

    };

两者的区别就是:

数组中间值比较排序是根据数组的中间值去比较,然后分门别类,最后按左右数学的X轴规则合并,

而希尔排序是是设置一个动态步长根据每轮的条件去定义步长,然后比较当前值和下一个值,是否要交换位置。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务