https://yuchengkai.cn/docs/zh/cs/algorithm.html#冒泡排序
这是对上面文章的算法,进行整理和学习。文章里面有比较深入和全面的前端知识,很值得如我一样的技术小白学习。
首先给出两个通用函数,并注明这个排序是升序
function checkArray (arr) {
if (!Array.isArray(arr)) return
}
function swap (arr, x, y) {
let temp = arr[x]
arr[x] = arr[y]
arr[y] = temp
}
冒泡排序
function buddle (arr) {
checkArray(arr)
for (let i = arr.length - 1; i > 0; i--) {
// 从 0 到 'length - 1'遍历
for (let j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) swap(arr, j, j+1)
}
}
return arr
}
思路是:从数组最后一项开始遍历,将前面的元素和后一项比较,若前一项大于后一项则交换位置。
插入排序
function insertion (arr) {
checkArray(arr)
// 注意是从1开始
for (let i = 1; i < arr.length; i++) {
// 遍历i前面的元素
for (let j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swap(arr, j, j + 1)
}
}
return arr
}
思路:假定第一位已经排序好,再遍历后面的元素,将后面的元素和前面的所有元素比较,若前面有元素大于后面元素,则交换位置。
选择排序
function selection (arr) {
checkArray(arr)
// 不用遍历最后一项,因为最后一项肯定是最大值
for(let i = 0; i < arr.length - 1; i++) {
// 最小值的索引
let minIndex = i
for (let j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex
}
// 每次循环都交换当前项和当前项之后的最小值
swap(arr, i, minIndex)
}
return arr
}
console.log(selection(test))
思路:这个算法我认为是最好了解的。除了最后一项外,遍历数组,将当前项和当前项之后的最小值交换,这样数组每个元素都比后面的元素小。
快排
待更新