【冒泡排序】
1. 概念:概念:相邻两个值比较(比较一次出一个最大值)
let arr = [2, 7, 45, 4, 67, 34, 90, 210, 250, 7, 1, 9];
//外层循环是比较的次数
for (let i = 1; i < arr.length; i++) {
//内层循环是当前循环,响铃两个值的比较
//arr.length-i,内层循环的比较次数
//由于外层循环每一次,都能找到最大值,则内层循环就减少一次比较
for (let j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
console.log(arr); /*[
1, 2, 4, 7, 7,
9, 34, 45, 67, 90,
210, 250
]*/
for (let j = 0; j < arr.length - i; j++) {
let num = a[j];
let num1 = a[j+1];
if (num > num1) {
//数组下标值得互换
//错误案例:两个变量值互换,数组没变
[num, num1] = [num1, num];
}
}
【选择排序】
概念:以第一个值开头,依次比较后面的数找到一个最小的数就和第一个数交换
升序
let arr = [2, 7, 45, 4, 67, 34, 90, 210, 250, 7, 1, 9];
//存储最小值得下标
for(let i=0;i<arr.length-1;i++){
let min = i;
for(let j=i+1;j<arr.length;j++){
//如果存在比min存储得值小的,则把该值得下标给min
if(arr[j] < arr[min]){
min = j;
}
// arr[j] < arr[min] ? min = j : "";
}
//内层循环结束,代表已经找到本次循环得最小值,则进行互换
[arr[i],arr[min]] = [arr[min],arr[i]]
}
console.log(arr);
降序
//选择排序
let arr = [2, 7, 45, 4, 67, 34, 90, 210, 250, 7, 1, 9];
//存储最大值得下标
for(let i=0;i<arr.length-1;i++){
let max = i;
for(let j=i+1;j<arr.length;j++){
//如果存在比max存储得值大的,则把该值得下标给max
if(arr[j] > arr[max]){
max = j;
}
// arr[j] < arr[max] ? max = j : "";
}
//内层循环结束,代表已经找到本次循环得最大值,则进行互换
[arr[i],arr[max]] = [arr[max],arr[i]]
}
console.log(arr);