冒泡:从小到大,每轮依次比较相邻两个数的大小,后面比前面小则交换
const arr = [1, 3, -4, 99, -84, 0, 47];
function bubbleSort(arr) {
let tmp = null;
for (let i = arr.length; i > 0; i--) {
//确保每次都是最小的值排在最前面
for (let j = 0; j < i - 1; j++) {
//每个元素都会跟全部的值进行比较
if (arr[j] > arr[j + 1]) {
// 前一个元素比或一个大,则向后冒泡(交换)
tmp = arr[j]; //暂时存储较大的值
arr[j] = arr[j + 1]; //当前位置存储较小的值
arr[j + 1] = tmp; //后一个位置存储较大的值
}
}
return arr;
}
console.log(bubbleSort(arr))//--> [-84, -4, 0, 1, 3, 47, 99]
选择排序:从大到小/从小到大
const arr = [1, 3, -4, 99, -84, 0, 47];
function selectionSort(arr) {
for (let i = 0; i < arr.length; i++) {
let minIndex = i; // 假设arr[i]为最小元素(即默认就是递增)
let tmp = null;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] > arr[minIndex]) {
//arr[j] > arr[minIndex] --> 从大到小
//arr[j] < arr[minIndex] --> 从小到大
// 如果arr[j]比arr[minIndex]还小
minIndex = j; // 更新最小元素的下标
}
}
tmp = arr[i];
arr[i] = arr[minIndex];//当前位置存储较大的值
arr[minIndex] = tmp;//后一个位置存储较小的值
}
return arr;
}
console.log(selectionSort(arr))//-->[99, 47, 3, 1, 0, -4, -84]
注:如果程序写错或者注释不恰当,欢迎指正!!!