js中的排序算法
1.冒泡排序
元素两两对比,值较小的数往前面排
for (let i = 0; i < arr.length ; i++) {
for (let j = 0; j < arr.length-1; j++) {
//相邻元素对比
if (arr[j] > arr[j+1]) {
let temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
console.log(1111)
}
}
console.log(arr)
}
bub([25, 45, 63, 1, 27, 1, 5, 9, 85, 42, 14])
当然,我们还可以优化一下
for (let i = 0; i < arr.length-1 ; i++) {
for (let j = 0; j < arr.length-1-i; j++) {
//相邻元素对比
if (arr[j] > arr[j+1]) {
let temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
console.log(1111)
}
}
console.log(arr)
}
bub([25, 45, 63, 1, 27, 1, 5, 9, 85, 42, 14])
这样的话循环的次数会变少
2.选择排序
遍历数组,选择最小的数放在前面
function sel(arr) {
let minIndex,temp
for (let i = 0; i < arr.length-1; i++) {
minIndex = i
for (let j = i+1; j < arr.length; j++) {
if (arr[j]<arr[minIndex]) {
minIndex = j
}
console.log(11111)
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
console.log(arr)
}
sel([25, 45, 63, 1, 27, 1, 5, 9, 85, 42, 14])
当然了,他的执行次数也是55次,是一直非常稳定的算法之一,因为时间复杂度固定,所以进行排序的数据越小越好
3.插入排序
反复把数据往后挪,给需要插入的数据空出位置
function int(arr) {
let preIndex,current
for (let i = 1; i < arr.length; i++) {
preIndex = i - 1
current = arr[i]
while (preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex + 1] = arr[preIndex]
preIndex--
}
arr[preIndex + 1] = current
console.log(1111) //代表执行次数
}
console.log(arr)
}
int([25, 45, 63, 1, 27, 1, 5, 9, 85, 42, 14])