<script>
// var ary = [4,3,5,2,1];
//冒泡排序的思想:让当前项与后一项进行比较,如果当前项大于后一项,两者交换位置
//第一轮比较:
//拿出数组的第一项4与后一项3比较,4>3,交换位置[3,4,5,2,1]
//4<5 不交换位置[3,4,5,2,1]
//5>2 交换位置[3,4,2,5,1]
//5>1 交换位置[3,4,2,1,5]
//虽然没有实现最后的目标,但是已经把数组中当前最大的那个值5已经放到数组的末尾位置了
//第一轮比较了四次,一共5个数,不用和自己比,最多比四次
//第二轮比较:
//3<4 不交换位置
//4>2 交换位置[3,2,4,1,5]
//4>1 交换位置[3,2,1,4,5]
//也没有实现最后的目标,但是把剩余项中最大的那个4放在倒数第二位了
//第二轮比较了三次,首先不用和自己比,最多四次,但是第一轮我们已经把最大的一个数放到末尾了,不需要再和末尾的5比了
//第三轮比较:
//3>2 交换位置[2,3,1,4,5]
//3>1 交换位置[2,1,3,4,5]
//第三轮比较了两次,首先不用和自己比,最多四次,但是第一轮第二轮我们已经把最大的俩个数放到了末尾,不需要再和4/5比了
//第四轮比较:
//2>1 交换位置[1,2,3,4,5]
//每一轮当前项和后一项俩俩比较的话,虽然不一定达到最后的目标结果,但是已经把当前最大的那个值放在后面了->数组一共有5项,我只需要比较4轮,把四个最大值分别放到末尾,就实现了排序,一共最多需要比较多少轮ary.length-1
// i 轮数:i-0;i<ary.length-1;
// j 代表每一轮比较的次数
//两者交换位置
// var a = 12;
// var b = 13;
// var c = null;
// c = a;
// a = b;
// b = c;
// var a = 13;
// var b = 15;
// a = a+b; //28
// b = a-b; //13
// a = a-b; //15
// function bubbleSort(ary) {
// var temp = null;
// for(var i = 0;i < ary.length - 1; i++ ){
// for (var j = 0;j < ary.length - 1 - i ; j++) {//j每一轮比较的次数
// if (ary[j] > ary[j+1]) {
// temp = ary[j];
// ary[j] = ary[j+1];
// ary[j+1] = temp;
// }
// }
// }
// return ary;
// }
// var ary = [4, 3, 5, 1, 2];
// var res = bubbleSort(ary);
// console.log(res);
//优化
//当flag=false时,退出循环
function bubbleSort(ary) {
var flag = false;
for(var i = 0;i<ary.length-1;i++){
for(var j = 0;j<ary.length-1-i;j++){
if (ary[j]>ary[j+1]) {
ary[j] = ary[j]+ary[j+1];
ary[j+1] = ary[j]-ary[j+1];
ary[j] = ary[j] - ary[j+1];
flag = true;
}
}
if (flag) {
flag = false;
}else{
break;
}
}
return ary
}
var ary = [2, 1, 3, 5, 6];
var res = bubbleSort(ary);
console.log(res);
</script>
数组的冒泡排序
最新推荐文章于 2018-08-29 08:48:05 发布