js数组排序
1.冒泡排序
-
规则:两两比较,大的放后面
-
比较过程:
0-1 1-2 2-3 3-4
①第一次两两比较 (第0位和第1位比较,第1位和第2位比较,第2位和第3位比较,第3位和第4位比较)
结果:把最大值换到了最后
0-1 1-2 2-3
② 第2次两两比较(最后一位不参加比较,因为已经是最大值)
结果:把第二大值换到了倒数第二位
0-1 1-2
③第3次两两比较(最后一位和倒数第二位不参加比较)
结果:把第三大值换到了倒数第三位
0-1
④第4次两两比较(最后一位、倒数第二位和倒数第三位不参加比较)
结果:把第三大值换到了倒数第三位 -
分析:
4行:length5-1
列:1:length5-1-0 i
列:2:length5-1-1 i
列:3:length5-1-2 i
列:4:length5-1-3 i
多行多列:循环嵌套
外层循环控制行
内层循环控制列 -
代码
<script>
var arr = [6,3,2,4,1];
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]){
// 交换 将大数换到后面,借助ls这个新的变量来交换
var ls = arr[j];
arr[j] = arr[j+1];
arr[j+1] = ls;
}
}
}
console.log(arr);
</script>
2.选择排序
1.规则:每次拿出一个数据,和剩下的其他所有数据相比较,得到大的或小的,与 初始位置做交换,比如,拿出第一位和后面所有作比较,找到最小的,放在第一位,第一位原本的值,放在最小的值得原来的位置。
2.比较:
①: 0-1 0-2 0-3 0-4
第0位和第1位比较,第0位和第2位比较,第0位和第3位比较,第0位和第4位比较。
结果:会得到一个最小值,将这个最小值放在第一位
②:1-2 1-3 1-4
第1位和第2位比较,第1位和第3位比较,第1位和第4位比较。
结果:会得到一个第二小的值,而且放在了第二位
③:2-3 2-4
结果:会得到一个第三小的值,而且放在了第三位
④:3-4
结果:会得到一个第四小的值,而且放在了第四位
3. 分析:
外层循环的次数:length-1
内层循环:
1:i ~ length-1
2:i ~ length-1
3:i ~ length-1
4:i ~ length-1
<script>
var arr = [3,4,5,2,1];
for(var i=0;i<arr.length-1;i++){
// 两个意思:
// ①假设,将第一位保存出来,用来和后面所有作比较
// ②假设,第一位是最小值
var iNow = arr[i];
// ②立即将假设的最小值的位置,也存出来
var iNowIndex = i;
// j如果等于i,j就等于i等于0了,就自己和就自己比较了
for(var j=i+1;j<arr.length;j++){
// ②验证假设第一位是最小的正确性,不正确,就拿到比假设的值还小的值
if(iNow > arr[j]){
iNow = arr[j];
// 此时 arr[j]最小了,所以保存最小的位置j
iNowIndex = j;
// 保存最小值得位置
}
}
// 小循环执行结束后,iNow必然是最小值,此时此刻数组还没有发生变化
// 交换位置:
var ls = arr[i];
arr[i] = iNow;
// 交换位置:上面是将最小值,放在第一位
// 第一位原本的数据,放在原本最小值的位置
arr[iNowIndex] = ls;
}
console.log(arr);
</script>