您的位置:首页 > 其它

数组的冒泡排序

2018-02-28 11:50 113 查看
<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: