«
js排序的几种方式

时间:2022-7   


1、sort()排序

const arr = [1, 3, 2, 7, 11, 44, 32, 5, 100, 78, 66, 9, 8]
arr.sort() //[1, 100, 11, 2, 3, 32, 44, 5, 66, 7, 78, 8, 9]

sort() 的问题很明显,它只比较最前面的数字!

如果想用sort正常排序怎么办呢?

const arr = [1, 3, 2, 7, 11, 44, 32, 5, 100, 78, 66, 9, 8]
arr.sort(function (a, b) {
  return a - b//正序
}) //[1, 2, 3, 5, 7, 8, 9, 11, 32, 44, 66, 78, 100]
arr.sort(function (a, b) {
  return b - a//倒序
}) //[100, 78, 66, 44, 32, 11, 9, 8, 7, 5, 3, 2, 1]

2、冒泡排序

function bubbleSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {//代表第几轮比较
    for (let j = 0; j < arr.length - 1 - i; j++) {//每一轮的两两相邻元素比较
      if (arr[j] > arr[j + 1]) {//相邻元素比较
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]//满足条件,交换位置
      }
    }
  }
  return arr
}
const array = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 60, 44]
bubbleSort(array)//[2, 3, 4, 11, 33, 44, 56, 60, 76, 88, 90, 99, 100]

3、快速排序

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr
  }
  let pivotIndex = Math.floor(arr.length / 2)
  let pivot = arr.splice(pivotIndex, 1)[0]
  let left = []
  let right = []
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i])
    } else {
      right.push(arr[i])
    }
  }
  return quickSort(left).concat([pivot], quickSort(right))
  //return [...quickSort(left), pivot, ...quickSort(right)]//或者这么写,更直观一点
}

4、选择排序

function selectSort(arr) {
  for(let i = 0; i < arr.length - 1; i++) {
    let index = i
    for(let j = i + 1; j < arr.length; j++) {
      if(arr[j] < arr[index]) {
        index = j
      }
    }
    [arr[i], arr[index]] = [arr[index], arr[i]]
  }
  return arr
}