数组冒泡排序原理

此篇以该数组为例 var array = [8,7,9,2,3,5,6,1];

数组冒泡循环原理:

相邻的两位数做比较,1和2比较 2和3比较 3和4比较 4和5比较,这样依次比较,如果前面的数小于后面的数,不做操作,如果前面的数大于后面的数则调换两个数字的位置,,列1>2 则数字顺序为2 1(注:此时的1 2 3 4 5代表索引而不是数组),所以一层循环能挑出一个当前数组参与比较数字中的最大的数字,并将其排到数组的最末尾。
但是一层循环根本不够用,只能挑选出一个最大数,数组中其他的数字还没有正确排序。
这里遵循一个原理就是数组里面有length个数字,要进行length-1次循环。至于为什么要this.length-i,是因为第一次比较7个数字,第二个只要比较前6个就行了,第7个肯定是最大的了。这里要着重强调为什么会有2个for循环,为什么要用this.length-i。
下面用一个列子来做详细的说明:

var array = [8,7,9,2,3,5,6,1];
var temp = 0;
function sort(arr){
    for (var i = 0; i < arr.length; i++){//这里的i控制循环比较的次数
      for (var j = 0; j < arr.length - i; j++){
      //这里的j控制参与比较的数字个数,因为每比较一次都会产生一个最大的数字,那么下次比较的时候就没必要参与比较了,所以每比较一次都会减少一个数字
        if (arr[j] > arr[j + 1]){
          temp = arr[j + 1];
          arr[j + 1] = arr[j];
          arr[j] = temp;
      }
    }
  }
}
console.log('before: ' + array);//输出[8,7,9,2,3,5,6,1]
sort(array);
console.log(' after: ' + array);//输出[1,2,3,5,6,7,8,9]

那么讲到这里就在引出js中的sort()排序,sort是根据字符串值来进行排序的,如果想用sort对数组进行排列那么就需要对函数sort(),传递一个比较的函数,下面用一个例子来说明

var value = [0, 5, 15, 10, 2];
 function conmpares(a,b){    
       if(a < b){
            return 1;
       }else if(a > b){
           return -1;
       }else{
            return 0;
        }
}
console.log(value .sort(conmpare));//输出[15, 10, 5, 2, 0]

对这个列子代码的解读为:如果a < b 返回 1,那么此时 需要调换 a和b的位置,如果a > b,那么此时不需要调换*a和b的位置返回-1*,这样数组就形成了从大到小排序。那如果想进行从小到大排序呢

var value = [0, 5, 15, 10, 2];
 function conmpares(a,b){    
       if(a < b){
            return -1;
       }else if(a > b){
           return 1;
       }else{
            return 0;
        }
}
console.log(value .sort(conmpare));//输出[0, 2, 5, 10, 15]

对这个例子的代码解读为:如果a < b 返回-1,那么此时不需要调换*a和b的位置,如果a > b返回**1,那么此时*需要调换**a和b的位置,这样数组就形成了从小到大排序。
综上所叙:①返回值是-1也就是说不需要调换两个数的位置
②返回值是1也就是说要调换两个数的位置,这两条结论适用于奇偶数排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值