冒泡排序是js中比较好理解的一种排序算法
基本原理:比较相邻的两个数。如果第一个比第二个大,就交换他们两个
随机选取10个 1-100的数 放到数组中
var list = [];
for(var i=0;i<10;i++){
var num = Math.round(Math.random()*100);
// list[i] = num;
list[list.length] = num; // 数组的递增赋值 在数组尾部插入一个元素
}
console.log("原数组:",list);
这时我们可以得到一个长度为10的无规则的数组
假设我们得到的是 [78, 69, 41, 16, 99, 16, 16, 51, 80, 84]
比较前后两个元素, 如果前边的值比后边的值大 则交换位置
排序思路:
第一轮 得到最大的值99 放在最后
//78,69 [ 69, 78, 41, 16, 99, 16, 16, 51, 80, 84];
//78,41 [ 69, 41, 78, 16, 99, 16, 16, 51, 80, 84];
//78,16 [ 69, 41, 16, 78, 99, 16, 16, 51, 80, 84];
//78,99 [ 69, 41, 16, 78, 99, 16, 16, 51, 80, 84];
//99,16 [ 69, 41, 16, 78, 16, 99, 16, 51, 80, 84];
//99,16 [ 69, 41, 16, 78, 16, 16, 99, 51, 80, 84];
//99,51 [ 69, 41, 16, 78, 16, 16, 51, 99, 80, 84];
//99,80 [ 69, 41, 16, 78, 16, 16, 51, 80, 99, 84];
//99,80 [ 69, 41, 16, 78, 16, 16, 51, 80, 84, 99];
// [69, 41, 16, 78, 16, 16, 51, 80, 84, 99]
第二轮 得到第二大的值84 放在倒数第二个位置
// 69,41 [ 41, 69, 16, 78, 16, 16, 51, 80, 84, 99];
// 69,16 [ 41, 16, 69, 78, 16, 16, 51, 80, 84, 99];
// 69,78 [ 41, 16, 69, 78, 16, 16, 51, 80, 84, 99];
// 78,16 [ 41, 16, 69, 16, 78, 16, 51, 80, 84, 99];
// 78,16 [ 41, 16, 69, 16, 16, 78, 51, 80, 84, 99];
// 78,51 [ 41, 16, 69, 16, 16, 51, 78, 80, 84, 99];
// 78,80 [ 41, 16, 69, 16, 16, 51, 78, 80, 84, 99];
// 80,84 [ 41, 16, 69, 16, 16, 51, 78, 80, 84, 99];
// 84,99 [ 41, 16, 69, 16, 16, 51, 78, 80, 84, 99];
...
依此类推我们可以把数组中的元素按照从小到大的顺序进行排序
代码实现:
for(var j=0;j<list.length-1;j++){
for(var i = 0;i < list.length-1-j; i++){ // 0 length-2
if(list[i] > list[i+1]){
var temp = list[i];
list[i] = list[i+1];
list[i+1] = temp;
}
}
console.log(j,list);
}
需要注意的是由于最后一个元素已经是最大的了,所以最后一个元素不用比较
为了程序的优化我们每次循环遍历时需要减去循环的次数,从而使每次循环得到的最大的数不用参与比较