前言
此文章只为记录分享本人的一些浅薄理解,同时希望可以给一些困惑的朋友些许启发。
排序
冒泡排序
冒泡排序算是最经典,也是最简单的排序了,不过排序的效率也是最慢的。
实现思路:
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
}
实现动画: