JavaScript数组 - 冒泡排序
冒泡排序
这节我们来讲大名鼎鼎的冒泡排序
原理:前后两个数两两进行比较,如果符合交换条件,交换位置,知道所有数据排序完成,结束比较。
举个小例子:
我们来给9,8,7,6,5,4,排序为4,5,6,7,8,9
var arr = [9,8,7,6,5,4]
排序比较的过程:
第一轮:
接着进行第二轮的排序比较:
(9在最大位置上,所以在接下来的几轮里不跟着参与)
再进行第三轮的排序比较
(这一轮的8在最大位置,以后也不再参与)
以此类推…
经过上面的每一轮比较,我们发现每一轮都取到一个最大的数放在最后
拿我们的第一轮9为例,因为我们比较的方式是两两进行比较的,所以这个9就像一个泡泡一样一层一层往上冒。所以我们把上面的过程称为冒泡排序
上面我们执行了5轮,这只是我们的分析过程,真正的执行过程还要通过循环
分析:
1.先定义一个外层循环i为总共循环了几轮;i < arr.length
2.再定义每一轮比较的次数j,j是总的元素个数 – 当前的元素,第一轮是6-1,第二轮6-2…等等,由于i是从0开始,所以我们要再减1;j < arr.length – i - 1
3.判断前后两个数是否复合交换条件;arr[i] > arr[j + 1]
4.如果符合条件就交换位置;tmp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = tmp;
var arr = [9,8,7,6,5,4];
for(var i = 0; i < arr.length; i++){//比较的轮次
//每一轮比较的次数
for(var j = 0; j < arr.length - i - 1; j++){
//判断前后两个数是否复合交换条换
if(arr[j] > arr[j + 1]){
var tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
alert(arr);
运行结果如下
这里主要i和j主要难理解,需要花点时间自己去理解
必须要知道i和j的作用到底是干什么的
i=0时,j<5第一轮是0 1 ,1 2 ,2 3 ,3 4等等…
i=1时,j<4第二轮是0 1 ,1 2 ,2 3 等等…
以此类类推……
这是从小到大进行排列,如果从大到小排列将数组的大于号改为小于号即可
赞 (0)