title: javascript排序算法01
date: 2021-04-15
tags:
- 算法
- 排序
冒泡排序
两两对比,如果n项大于n+1项,就交换位置。
基本的
forEach
执行就是所有循环结束,不能break
。map
同理
const arr = [90, 33, 23, 43, 54, 123, 78, 56, 76, 112]
// const arr = [1, 2, 3, 4, 5, 6, 7]
let a = 0
//基本
arr.forEach(() => {
arr.forEach((k, i) => {
const count = arr[i + 1]
if (arr[i] > arr[i + 1]) {
arr[i + 1] = arr[i]
arr[i] = count
}
})
})
console.log(a);
console.log(arr); //[ 23, 33, 43, 54, 56, 76, 78, 90, 112, 123 ]
优化版
// 优化
const arr = [90, 33, 23, 43, 54, 123, 78, 56, 76, 112]
for (var i = 0; i < arr.length - 1; i++) {
var flag = false;
for (var j = 0; j < arr.length - i - 1; j++) {
a++
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if (flag == false) {
break;
}
}
console.log(arr); //[ 23, 33, 43, 54, 56, 76, 78, 90, 112, 123 ]
选择排序
每次排序把最大的或者最小的放到开头或者末尾
const arr = [90, 33, 23, 43, 54, 123, 78, 56, 76, 112]
function selectSort(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
}
}
// 每次找出的最小数和当前的数交换位置
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr
}
selectSort(arr)
console.log(arr);//[ 23, 33, 43, 54, 56, 76, 78, 90, 112, 123 ]
插入排序
从第二个数开始,如果当前数大于或者小于前一个数,就交换位置
const arr = [90, 33, 23, 43, 54, 123, 78, 56, 76, 112]
function insertSort(arr) {
var len = arr.length;
for (var i = 1; i < len; i++) {
//key为当前数
var key = arr[i];
// j为前一个数的下标
var j = i - 1;
//如果前一个数大于当前数
while (j >= 0 && arr[j] > key) {
//当前数等于前一个数
arr[j + 1] = arr[j];
//j减一
j--;
}
//满足条件的最前面的数等于当前数
arr[j + 1] = key;
}
return arr;
}
insertSort(arr)
console.log(arr); //[ 23, 33, 43, 54, 56, 76, 78, 90, 112, 123 ]