Undeclared
7/2/2019 - 3:52 AM

SortArray

const bubbleSort = sourceArray => {
  if (sourceArray.length < 2) {
    return sourceArray
  }
  let arr = sourceArray
  for (let i = 0; i < arr.length; i++) {
    let flag = true
    for (const j = 0; j < arr.length - i; j++) { // 去掉已经进行过排序的项
      if (arr[j] > arr[j + 1]) {
        const temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp

        flag = false
      }

      if (flag) { // 如果一次也没有进行交换,则本次循环已经是有序的
        break
      }
    }
  }

  return arr
}
const selectionSort = sourceArray => {
  if (sourceArray.length < 2) {
    return sourceArray
  }
  let arr = sourceArray

  for (let i = 0; i < arr.length - 1; i++) {
    let minIdx = i
    // 通过循环找到本次最小的值
    for (const j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[minIdx]) {
        minIdx = j
      }
    }
    // 交换
    if (i !== minIdx) {
      const temp = arr[i]
      arr[i] = arr[minIdx]
      arr[minIdx] = temp
    }
  }
}
const insertSort = sourceArray => {
  if (sourceArray.length < 2) {
    return sourceArray
  }

  let arr = sourceArray

  for (let i = 1; i < arr.length; i++) {
    const temp = arr[i] // 这次要插入的值
    let j = i

    while (j > 0 && arr[j - 1] > temp) {
      arr[j] = arr[j - 1]
      j--
    }

    if (i !== j) {
      arr[j] = temp
    }
  }
  return arr
}