冒泡排序思路
双重for循环
外层控制趟数(len - 1)
内层用于相邻元素相比较以及交换位置(在每一趟完成过后,内层循环次数会减少,循环次数为len -1 - i)
let arr = [2, 4, 1, 8, 0, 2];
let len = arr.length;
//冒泡排序
for(let i = 0; i < len - 1; i++){
for(let j = 0; j < len - 1 - i; j++){
if(arr[j] > arr[j + 1]){
let tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
选择排序思路
先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。
let arr = [2, 4, 1, 8, 0, 2];
let len = arr.length;
let j; //为了下面比较min和j的大小时,能拿到j
for(let i = 0; i < len; i++){
let min = i;
for(j = i + 1; j < len; j++){
if(arr[min] > arr[j]){ //注意此处必须时arr[min],而不是arr[i],因为min可能会变化,要保证arr[min]是最小的元素
min = j;
}
}
if(min != i){
let tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp
}
}