产生随机数进行测试
function randomNum(num) {
const data = []
for (let i = 0; i < num; i++) {
const val = Math.round(Math.random() * 100)
data.push(val)
}
return data
}
一。插值排序算法:从小到大排序 => 思想是通过当前值与前一个值进行比较判断数组 i - 1 的值是否大于当前值,是就将 i - 1 的值替换成大的值,然后再取数组的 i - 1 -1... 的值与当前值比较,直到前面的值小于当前值为止或取到数组的第一个值为止。重复直到对该数组循环排序完成。
插值排序算法
function insertionSort(data = []) {
if (typeof data === 'object' && JSON.stringify(data).indexOf('[') === 0 && data.length > 0) {
for (let i = 1; i < data.length; i++) {
const val = data[i]
let j = i - 1
for (j; j > -1 && data[j] > val; j--) {
data[j + 1] = data[j]
}
data[j + 1] = val
}
return data
} else {
console.log('类型只能为数组且长度大于0')
}
}
二。快速排序:从小到大排序 => 首先找数组中间的一个值为基准,然后通过循环比较得出小于的值、等于的值、大于的值,然后递归调用,最后将数组拼接起来。
快速排序算法
function fastSort(data = []) {
if (data.length > 1) {
const centerVal = data.splice(Math.floor(data.length / 2), 1)[0]
const leftData = []
const centerData = [centerVal]
const rightData = []
for (let i = 0; i < data.length; i++) {
if (data[i] > centerVal) {
rightData.push(data[i])
}
if (data[i] === centerVal) {
centerData.push(data[i])
}
if (data[i] < centerVal) {
leftData.push(data[i])
}
}
return fastSort(leftData).concat(centerData, fastSort(rightData))
} else {
return data
}
}
本文深入探讨了两种常用的排序算法——插值排序和快速排序。通过代码示例详细解释了每种算法的工作原理,包括如何实现从小到大的排序过程。插值排序通过比较当前值与前一个值来调整数组元素的位置,而快速排序则选取基准值进行分区,再递归地对子数组进行排序。
1006

被折叠的 条评论
为什么被折叠?



