冒泡排序和选择排序
冒泡排序:
规则:两两比较,大的数据放后面
var arr = [6,3,2,4,1];
两两比较:下面列出来的这个结构,是比较次数,不是数据
0-1 1-2 2-3 3-4 必然得到最大值,并且放在了最后
0-1 1-2 2-3 必然得到第二大的值,并且放在了倒数第二位
0-1 1-2
0-1
// 4行:length5-1
// 列:1:length5-1-0 i
// 列:2:length5-1-1 i
// 列:3:length5-1-2 i
// 列:4:length5-1-3 i
// 多行多列:循环嵌套
// 外层循环控制行
// 内层循环控制列
console.log(arr);
// 大循环,确定执行几轮(确定行)
for(var i=0;i<arr.length-1;i++){
// 小循环,每轮执行多少次(每行的列)
for(var j=0;j<arr.length-1-i;j++){
// 开始判断了,将当前位置和后一位作比较,大的放后面
if(arr[j] > arr[j+1]){
// 交换
var ls = arr[j];
arr[j] = arr[j+1];
arr[j+1] = ls;
}
}
}
console.log(arr);
选择排序:
规则:规则:每次拿出一个数据,和其他所有数字相比较,得到大的或小的,与初始位置做交换,比如,拿出第一位和后面所有作比较,找到最小的,放在第一位,第一位原本的值,放在最小的值得原来的位置
确定次数,再写代码
0-1 0-2 0-3 0-4 必然会得到一个最小值,而且放在了第一位
1-2 1-3 1-4 必然会得到一个第二小的值,而且放在了第二位
2-3 2-4
3-4
外层循环的次数:length-1
内层循环:
1:i ~ length-1
2:i ~ length-1
3:i ~ length-1
4:i ~ length-1
for(var i=0;i<arr.length-1;i++){
假设,将第一位保存出来,用来和后面所有作比较
假设,第一位是最小值
var iNow = arr[i];
立即将假设的最小值的位置,也存出来
var iNowIndex = i;
for(var j=i+1;j<arr.length;j++){
验证假设第一位是最小的正确性,不正确,就拿到比假设的值还小的值
if(iNow > arr[j]){
iNow = arr[j];
iNowIndex = j;
}
}
小循环执行结束后,iNow必然是最小值,此时此刻数组还没有发生变化
var ls = arr[i];
arr[i] = iNow;
上面是将最小值,放在第一位
第一位原本的数据,放在,原本最小值的位置,原本最小值得是哪呢?
arr[iNowIndex] = ls;
}
console.log(arr);