// sort函数排序
[8,2,4,9,1,3,7,5,6].sort((a,b)=>{return a-b})
// 冒泡排序 // 思想: 每次找出一个 最大/小 将它像冒泡一下 排到最左/右 // 分析: 需要两层循环,
// 第一层:冒泡多少次; 需要找到 a.length-1 个最大的数,剩下一个已经是最小的了不用在冒泡
// 第二层:需要比较几次; 找出本次最大的需要比较几次,已经找出了i个最大的,name剩余 a.length-i个数只需要比较 a.length-i-1 次
var a = [8,2,4,9,1,3,7,5,6]
function bubbleSort(a){
for(let i=0; i <= a.length-1; i++) {
for(let j=0; j < a.length-i-1; j++) {
if(a[j] > a[j+1]) {
const temp = a[j]
a[j] = a[j+1]
a[j+1] = temp
}
}
// console.log(i,' - ', a)
}
}
// bubbleSort(a)
// console.log(a)
// 选择排序 O(n²) // 思想: 每次找到第 i 小数的下标,将该下标的数和应该排到哪里的下标(i)的数对换 // 分析:
需要两层循环
// 第一层:找出多少次最小的数; 需要找出并排好 i-1 次最小的数
// 第二层:找出本次 第 i 小的数的小标;
var a2 = [8,2,4,9,1,3,7,5,6]
function selectionSort(a2) {
var len = a2.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (a2[j] < a2[minIndex]) { //寻找最小的数
minIndex = j; //将最小数的索引保存
}
}
temp = a2[i];
a2[i] = a2[minIndex];
a2[minIndex] = temp;
// console.log(a2)
}
return a2;
}
selectionSort(a2)
// console.log(a2)
// 插入排序 // 思想: 每一步将一个待排序的数据 正确插入到 前面已经排好序的 有序序列中,直到插完所有元素为止
var a3 = [8,2,4,9,1,3,7,5,6]
function insertionSort(arr) {
var len = arr.length;
var preIndex, current;
for (var i = 1; i < len; 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(a3)
}
return arr;
}
insertionSort(a3)