提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一 .整体思路
=> 相邻两个数之间进行比较 (j,比较次数从第0次开始)
-> 第零次:1,3,5,4,8,9,7,11 //最后的数最大,已自然排好,不需要排;8数排(比较)7次; 最后一数已排好,-0
-> 第一次:1,3,4,5,8,7,9,11 //倒数第二ok 前7数排6次; 最后两数已排好,-1(最后两数不比较,比较次数-1)
-> ...
->倒数第二次 (第六次) //前两数 排一次; 最后六数已排好,-6
-> 最后:1,3,4,5,7,8,9,11 //最前一数 不用排 全部排好,-7
二、使用步骤
1.第一步
代码如下(示例):
var arr = [3, 1, 5, 8, 4, 11, 9, 7] // 第一步 //*循环数组,相邻两数比较大小: 若 前>后,互换 //* 此为第一次比较; i为数组的索引 //* i<arr.length-1是因为每个数字都需要比较,此处有8个数,共需比较8(length)次,但最后一值最大,不能再继续向下比较,故-1(length-1); 或者说最后一数最大,无需比较 for(var i=0;i<arr.length-1;i++){ console.log(arr[i]); if(arr[i]>arr[i+1]){ var tmp=arr[i] arr[i]=arr[i+1] arr[i+1]=tmp } }
2.第二步
代码如下(示例):
//第二步 //* j代表比较的次数;
//* j<arr.length-1 本该有多少数排多少次,但(最后一次 仅剩最前的一个数字未排,其余都已排好)===(全都排好); 最后一次不需要排,故-1
for (var j = 0; j < arr.length - 1; j++) {
//arr.length-1-j -j即每次比较,都可以减少 比较次数 的次数; -1即每次最后一个数(最大值)都无需比较(不能再继续向下比较)
for (var i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
var tmp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = tmp
}
}
}
console.log(arr)
总结:记忆口诀
双层for循环,每层都-1;内层接外层,两两相交换
本文含有隐藏内容,请 开通VIP 后查看