记录一下学习函数封装冒泡排序的想法
<script>
// 利用函数进行冒泡排序
function sort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
console.log('外层执行次数' + i);
for (var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
console.log('内层' + j);
}
}
return arr
}
var arr1 = sort([18, 43, 35, 22, 32])
console.log(arr1);
</script>
首先声明一个函数,使用 sort 作为函数名;
小括号内写入一个名为 arr 的形参,用于接收实参传输过来的数组;
接下来在函数内创建第一个 for 循环,用于遍历数组,初始化变量名为 i ,执行条件为 i 小于最高位-1,操作符为i++。
解释一下为什么i要小于最高位-1?
假设一个数组有5个元素,那么需要依次比较两个元素的大小比较4次,才能将所有元素进行都比较到。我们的计数器执行条件是小于自身数组元素长度(最高位)-1,默认长度为5,减去1为4,小于4才能执行所以不包括4,计数器从0开始:0代表第一次循环,1代表第二次循环,2代表第三次循环,3代表第四次循环,4因为不满足执行条件了,所以终止执行循环,此时循环已经执行了4次分别是计数器0、1、2、3.
接下来是里层 for 循环
里层循环使用 j 来作为计数器,从0开始,执行条件为 j 小于数组最高位 - i - 1,j++
解释一下为什么 j 要小于最高位 - i - 1?
上边我们已经知道了需要循环4次才能将所有元素进行都比较到,那么现在里层循环负责的是每次循环时,一个数要和其他数比较几次才能比较完,数组0位和数组1位比,数组1位和数组2位比,数组2位和数组3位比,数组3位和数组4位比,所以得出要对比4次才能比较完。
并且每次比较的次数需要依次减少,切记数组从0位开始比较。
在外层第一次循环时,我们的里层的第一次循环 j < arr.length - i -1; -i(此时的i为0)-1,也就是5-0-1=4
并且 j 还要小于 arr.length - i -1; 也就是 j<4; 有效执行为4次从0开始,0,1,2,3,也就满足了比较所需的次数需求。
\
接下来是if语句, arr[j] >arr[j+1] ,arr[j]代表先从数组的0位开始比较,arr[j+1]代表数组0+1位,也就是arr[j]的后一个元素,如果0位大于0+1位,就使用 转交法(自己想的名字),把0位的元素给临时变量 temp;此时0位上就是空的,再把0+1位给0位,此时0位有了0+1的元素,0+1位为空,再把temp的元素给0+1位,这样就转交完成了。
外层共循环4次,里层根据外层循环的次数,会依次减少自己的循环次数。
最后在函数层内使用return语句 把计算好的arr形参数值给函数名
var arr1 = sort ([18,43,35,22,32])
创建一个新的变量用于储蓄函数结果
最后log 输出结果。
仅用于自己学习---------