冒泡算法简单来说就是让数组中需要比较大小的数据,像气泡一样,小的往上冒,大的往下沉,由此得出由小到大按顺序排列的数组。我总结了两种方法实现,一种是从头部开始比较,另一种是从尾部开始比较。
从头部开始比较:
var arr = [5,7,1,2,9,8];
for(var i = 0;i<arr.length-1;i++){
for(var j = 0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
var t;
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
其中第一个 for 循环控制比较轮次,因为 arr.length 从一开始数为 6,但是 for 循环里 i 从 0 开始,故需 arr.length - 1 ,但由于比较5轮次后得到5个已经排好序的数据,所以最后一个数不用比较,因此要小于 arr.length - 1 。 第二个for循环进行比较大小和交换位置,因为比较一轮会把处于底部的最小值排到最顶,所以接下来就不用再比较它了,只需比较剩余的数即可,所以需要小于 arr.length - 1 -i。
第一轮:5 7 1 2 9 8 5 1 7 2 9 8 5 1 2 7 9 8
第二轮:5 1 2 7 8 9 1 5 2 7 8 9
比较结束:1 2 5 7 8 9
从尾部开始比较:
var arr = [5,7,1,2,9,8];
for(var i = 0;i<arr.length-1;i++){
for(var j = arr.length-i-1;j>=0;j--){
if(arr[j]>arr[j+1]){
var t;
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
第一轮:5 7 1 2 9 8 5 7 1 2 8 9 5 1 7 2 8 9
第二轮:1 5 7 2 8 9 1 5 2 7 8 9
比较结束:1 2 5 7 8 9