JavaScript實現(xiàn)十大排序算法缝裁,代碼+動圖+在實現(xiàn)代碼的時候遇到的坑
冒泡算法
(1) 實現(xiàn)思路
不斷的重復的對比相鄰的兩個元素糯景,把大(凶蟀)的移到一個方向去
(2) 代碼實現(xiàn):
bubbleSort (arr) {
let len = arr.length
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - i - 1; j++) {
if (arr[j + 1] < arr[j]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr
}
(3)寫代碼時候容易犯的思路錯誤:
在if (arr[j + 1] < arr[j]) 這塊用 arr[j] 和 arr[i]做比較担钮,
冒泡排序中,外圈循環(huán)只是用來計數(shù)的厚棵。需要做比較的是相鄰的兩項蕉世,就是arr[j] & arr[j + 1]
(4) 動畫效果
冒泡排序.png
選擇排序
(1) 實現(xiàn)思路
每一次直接選出最小(大)的一個婆硬,不斷重復
seleteSort (arr) {
let len = arr.length
for (let i = 0; i < len; i++) {
let minIndex = i
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
[arr[minIndex], arr[j]] = [arr[j], arr[minIndex]]
minIndex = j
}
}
}
return arr
},
插入排序
insertSort (arr) {
let len = arr.length
for (let i = 0; i < len; i++) {
let index = i
for (let j = i - 1; j >= 0; j--) {
if (arr[j] > arr[index]) {
[arr[j], arr[index]] = [arr[index], arr[j]]
index = j
}
}
}
return arr
},
快速排序
quickSort (arr) {
let len = arr.length
if (len <= 1) return arr
let pivot = Math.floor(len / 2)
let item = arr.splice(pivot, 1)
let left = []
let right = []
for (let i = 0; i < len - 1; i++) {
if (arr[i] < item) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return this.quickSort(left).concat(item, this.quickSort(right))
}