选择排序
1选出最小的数放在首位 2再从剩余元素继续查找最小值,以此类推
const choose = (arr) => {
for (let j = 0; j < arr.length - 1; j++) {
let min = j
for (let i = min + 1; i < arr.length; i++) {
if (arr[min] > arr[i]) {
min = i
}
}
[arr[j], arr[min]] = [arr[min], arr[j]]
}
}
插入排序
插入排序 我的理解是反向冒泡,选择一个数依次与自己前一个数比较,小则往前插入,以此类推
const ins = (arr) => {
for (let j = 1; j < arr.length; j++) {
let min = j
for (let i = j - 1; i >= 0; i--) {
if (arr[min] < arr[i]) {
[arr[min], arr[i]] = [arr[i], arr[min]]
min = i
}
}
}
}
希尔排序
希尔排序是插入排序的升级版
步骤
(1)在第一趟排序中,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。
(2)接下来,按照直接插入排序的方法对每个组进行排序。
在第二趟排序中,我们把上次的 gap 缩小一半,即 gap2 = gap1 / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。
(3)按照直接插入排序的方法对每个组进行排序。
(4)在第三趟排序中,再次把 gap 缩小一半,即gap3 = gap2 / 2 = 1。 这样相隔距离为 1 的元素组成一组,即只有一组。
(5)按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。 原文链接:blog.csdn.net/qq845579063…
const arr = [9,1,2,5,7,4,8,6,3,5]
const dsdaa = (arr) => {
let gap = Math.floor(arr.length / 2)
while (gap >= 1) {
for (let j = gap; j < arr.length; j += gap) {
for (let i = j; i >= gap; i -= gap) {
if (arr[i] < arr[i - gap]) [arr[i], arr[i - gap]] = [arr[i - gap], arr[i]]
}
}
gap = Math.floor(dd / 2)
}
}
dsdaa(arr) //[1,2,3,4,5,6,7,8,9]