JS排序方法

76 阅读1分钟

1. sort排序

function sortFun(nums) {
  return nums.sort((a, b) => {
    return a - b
  })
}

2. 冒泡排序

function bubbleSort(nums) {
  for (let i = 0; i < nums.length - 1; i++) {
    // 一层循环
    for (let j = 0; j < nums.length - i; j++) {
      // 二层循环,对比相邻的两个数字,将大的数字往后放
      if (nums[j] > nums[j + 1]) {
        // 如果前一个数字比后一个数字大,则交换两数位置
        [nums[j], nums[j + 1]] = [nums[j + 1], nums[j]]
      }
    }
  }
  return nums
}

3. 选择排序

function selectionSort(nums) {
  for (let i = 0; i < nums.length; i++) {
    // 定义一个最小值索引 minIndex 为 i
    let minIndex = i
    for (let j = 0; j < nums.length; j++) {
      // 将最小索引值与每一项做对比
      if (nums[minIndex] > nums[j]) {
        // 如果出现比这个最小索引值更小的值,则更改最小索引
        minIndex = j
      }
    }
    if (nums[i] !== nums[minIndex]) {
      // 如果索引 i 的值与最小索引 minIndex 的值不相等,则交换最小索引 minIndex 和 i 的值,将最小值移动到数组最前面
      [nums[i], nums[minIndex]] = [nums[minIndex], nums[i]]
    }
  }
  return nums
}

4. 插入排序

function insertSort(nums) {
  for (let i = 1; i < nums.length; i++) {
    // 定义常量 temp 为当前循环最小值
    const temp = nums[i]
    let j = i
    // 将值大的往后挪
    while(j > 0) {
      // 循环小于 i 的索引值,如果值大于 temp,则将当前 [j - 1] 赋值给 [j]
      if (nums[j - 1] > temp) {
        nums[j] = nums[j - 1]
      } else {
        // 如果 nums[j - 1] 不大于 temp,则跳出循环,因为 [j - 1] 前面的值都小于 [j - 1] 的值
        break
      }
      j -= 1
    }
    // 将当前循环最小值赋值给 [j]
    nums[j] = temp
  }
  return nums
}