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
}