聊一聊冒泡排序、选择排序、插入排序

164 阅读1分钟

前言

此文章只为记录分享本人的一些浅薄理解,同时希望可以给一些困惑的朋友些许启发。

排序

冒泡排序

冒泡排序算是最经典,也是最简单的排序了,不过排序的效率也是最慢的。

实现思路:
1、依次比较相邻的两个数,判断它们的大小,然后交换它们的位置
2、直到找到其中的最大(小)值为止
3、重复步骤1,直到所有的值都完成排序

// 基本数据
let data = [2, 5, 6, 1, 3, 7, 4]

// 冒泡排序
function bubbleSort (arr) {
  let len = arr.length
  if (len <= 1) return arr
  let temp
  for (let i = 0; i < len; i++) {
	for (let j = 0; j < len - i; j++) {
      if (arr[j + 1] < arr[j]) {
        temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
      }
    }
  }
  return arr
}

实现动画:

选择排序

选择排序算是冒泡排序的一个改进版

实现思路:
1、取当前值为最小值
2、和数组的值依次比较,如果当前值比选择的最小值要小,则将最小值替换成当前值,并且记录索引值
3、重复步骤2,直到完成结束当轮比较
4、完成步骤3时,则替换当前值与所记录索引位置的值
5、重复步骤2,直至所有值比较完成

// 选择排序
function selectSort (arr) {
  let len = arr.length
  if (len <= 1) return arr
  let temp
  for (let i = 0; i < len; i++) {
    let min = arr[i]
    let index = i
    for (let j = i + 1; j < len; j++) {
      if (arr[j] < min) {
      	min = arr[j]
        index = j
      }
    }
    temp = arr[i]
    arr[i] = arr[index]
    arr[index] = temp
  }
  return arr
}

实现动画:

插入排序

插入排序就类似我们打扑克牌一样,不停的抓取新牌,然后将抓到的牌安装顺序排列好,直至所有的牌抓完

实现思路:
1、默认第一个值已经自动排序好,从第二个值开始
2、获取下一个值作为当前值
3、将当前值与前面的值进行比较,如果当前值小于前一个值,则将当前值插入到前一个值的前面
4、重复步骤3,直至当前值前面没有了值或者不是小于当前值
5、重复步骤2,直至没有下一个值

// 插入排序
function insertSort (arr) {
  let len = arr.length
  if (len <= 1) return arr
  for (let i = 0; i < len; i++) {
  	let inserItem = arr[i]
    let j = i - 1
    while (j >= 0 && arr[j] > inserItem) {
      arr[j + 1] = arr[j]
      j--
    }
    arr[j + 1] = inserItem
  }
  return arr
}

实现动画: