冒泡算法精简理解

组长安排的工作做完了,闲得蛋疼。重新理解下最经典的冒泡算法。

原理:比较相邻的两个数,如果第一个数比后一个要大,则交换位置。

其实原理很好理解了,一看就是写个循环。但是要交换几次呢。我们就拿最简单的排序来推理一下。

假设数组是正序的1~9,我们手动排序的话需要交换0次。这是最少的交换次数。

如果数组是倒序9~1,我们需要一个一个的,9和8交换,9和7交换。。。。9和1交换,9到了最后一位,到达了他最终到达的位置,交换了8次。

然后是8,8和7交换,8和6交换。。。。8和1交换,到达了倒数第二位,这个数字也到达了他最终到达的位置,交换了7次。

。。。。。。

然后是2,2和1交换,交换了1次。

结束。

到了这里,我们定睛一看,感觉推理出来了。排了8次序,每次交换的次数是逐一递减的。

交换次数 = (n-1)+(n-2)+(n-3)+......+(n-(n-1))+0;

数学不好,不会推导,按照过程写出来就行了。

按照javascrip写下思路

function mp(arr){    //arr为需要排序的数组
  var length = arr.length;
  for(var i = 0;i < length - 1;i++){    //外循环为次数,需要循环n-1次
    for(var j = 0; j < length - 1 - i;j++){  //内循环为交换的次数 次数为 n-1-已经循环的次数
      if(arr[j] > arr[j+1]){      //如果前者比后者大,交换位置
        var a = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = a;
      }
    }
  }
  return arr;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值