【JS编程系列】实现快速排序

262 阅读1分钟

一、题目

题目:手写一个快速排序

例子:

    输入:[1, 34, 5, 76, 8, 6, 9, 7, 6, 3]
    输出:[1, 3, 5, 6, 6, 7, 8, 9, 34, 76]

二、代码实现

  var sortArray = function (nums) {
        quickSort(nums, 0, nums.length - 1)
        return nums
      }

      var quickSort = function (nums, i, j) {
        let start = i // 左指针
        let end = j //右指针
        let pivot = nums[start] //基准数,这里取数组第一个数
        //递归出口 左指针和右指针相等时候,说明只有一个值
        if (start >= end) {
          return
        }
        //左右指针相遇的时候退出扫描循环
        while (start < end) {
          //右指针从右向左扫描,碰到第一个小于基准数的时候停住
          while (start < end && nums[end] >= pivot) {
            end = end - 1
          }
          //否则交换位置
          swap(nums, end, start)
          //左指针从左向右扫描,碰到第一个大于基准数的时候停住
          while (start < end && nums[start] <= pivot) {
            start = start + 1
          }
          //否则交换位置
          swap(nums, start, end)
        }
        //递归处理左右数组
        quickSort(nums, i, start)
        quickSort(nums, start + 1, j)
      }

      var swap = function (nums, i, j) {
        let temp = nums[i]
        nums[i] = nums[j]
        nums[j] = temp
      }