冒泡排序
先声明一个数组var arr = [10, 3, 5, 1, 4, 8];
一、分析
同一个数组的元素,两两比较arr[i]与arr[i+1],值比较大的就放到后面arr[i+1],
a[0]为10,a[1]为3,比较之后a[0]为3,a[1]为10
之后再将arr[i+1]与arr[i+2]比较,再将比较大的值放到arr[i+2],直到所有元素都比较完一轮,那么arr[arr.length]即10就是数组里面的最大值
此时的结果为arr=[3,5,1,4,8,10],因为是两两进行比较所以共比较了arr.length-1次(5次)
但是最大值前面的数值并没有按从小到大的顺序排列,因此还需要再将这些值进行排序,此时最大值已经被排到了最后,因此还需要比较arr.length-2次(4次)
直到最后只剩下两个元素的比较,只比较1次 arr.length-(arr.length-1)
这样可以得出共比较了5轮(arr.length-1),每轮分别比较5,4,3,2,1次(arr.length-轮次数)
二、写表达式
这样可以通过循环来表达
for (var i = 1; i < arr.length; i++) {
//i为循环轮数
for (var j = 0; j < arr.length - i; j++) {
// j为当前元素,每轮比较次数(arr.length-轮次数)
if (arr[j] > arr[j + 1]) {
var m = arr[j]; //定义一个变量承接比较大的值
arr[j] = arr[j + 1]; //将比较小的值放在左边
arr[j + 1] = m; //比较大的值放到右边
}
}
}
三、输出结果
console.log(arr);
最后排序结果为:
[ 1, 3, 4, 5, 8, 10 ]
四、思考
如果需要倒序排列,需要怎么操作?同学们