冒泡排序之我见,希望前辈们拍砖!

冒泡排序实在是太简单了,但是理解后简单,理解之前理解起来也挺痛苦的,痛苦在哪呢?例如我有1、3、5、2、4这5个元素,会发生5-1=4次比较,于是乎得知n个元素会产生n-1次比较=。=以上,但是我看网上的代码的时候这个结论对我没什么帮助啊

public class BubbleSort{
  public  static  void  main(String args[]){
       int[] a={3,1,6,2,9,0,7,4,5};
       bubbleSort(a,a.length);
       for(int i=0;i<a.length;i++){   
            System.out.print(a[i]+" ");
       }
  }
  public  static  void  bubbleSort(int[] a,int n){
      int temp;
      for(int i = 1 ; i <= n-1 ; i++){
            for(int j = 0 ; j <= n - i - 1 ; j++){  //n代表元素个数,n-1代表最有一个元素的下标,两者的差一定为1,再减1得0
                  if (a[ j ] > a[ j + 1 ]) {                //所以j的右极限取值为数组导数第二个元素
                       temp = a[ j ];
                       a[ j ] = a[ j +1 ];
                       a[ j + 1 ] = temp;
                   }
            }
       }
  }
}

例如这段代码,我将边界都用了大于等于,小于等于,便于我自己理解

我不会将外层的循环理解成所谓的“进行n-1”次比较(尽管这是个结论,但这结论对于我这种菜鸟理解程序基本没什么帮助),而理解成外层的 i 的变化就是为了控制内层的 j 的变化,例如 i =1时,内层 j 可以移动到的最大范围为n-1,也就是数组最后一个元素,i=n-1时,j=n-(n-1)=1,也就是数组的第2个元素,这是极限情况,然后第2个元素再和第1个元素进行比较,冒泡结束,我本来就很菜再看网上云里雾里的就更懵了=。=前辈们我的理解对吗?就是外层 i 的变化纯粹就是为了控制内层 j 的移动范围从 1 到 n-1 而且。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值