排序算法之快排和冒泡排

157 阅读1分钟

快排

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortArray = function(nums) {
    const len = nums.length
    if (len <= 1) return nums
    const midValue = nums.splice(Math.floor(len/2), 1)
    const left = [], right = []
    for (let i = 0; i < nums.length; i++) {
        const curVal = nums[i]
        if (curVal < midValue) {
            left.push(curVal)
        } else {
            right.push(curVal)
        }
    }
    return [...sortArray(left), midValue, ...sortArray(right)]
};
const quickSort = nums => {
    const sort = (nums, left, right) => {
    if (left > right) return
    let i = left, j = right
    const prviot = nums[i]
    while(i < j) {
      while(i < j && nums[j] >= prviot) {
        j--
      }
      nums[i] = nums[j]
      while(i < j && nums[i] <= prviot) {
        i++
      }
      nums[j] = nums[i]
    }
    nums[i] = prviot
    sort(nums, left, i - 1)
    sort(nums, i + 1, right)
  }
  sort(nums, 0, nums.length - 1)
  return nums
}

冒泡

const bubbleSort = nums => {
  const len = nums.length
  for (let i = 0; i< len; i++) {
    for (let j = 1;j < len - i; j++) {
      if (nums[j -1] > nums[j]) {
        [nums[j -1], nums[j]] = [nums[j], nums[j - 1]]
      }
    }
  }
  return nums
}