冒泡排序算法

     今天第一次写博客,最近正在研究排序算法,就从最简单的冒泡排序算法开始写(有些时候为了面试,冒泡排序算法被问到的几率还是很高的,不仅要求知道原理,还要会写)。

     一. 首先看一下百度百科的算法原理。

          

冒泡排序算法的运作如下:(从后往前)
  1. 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 3.针对所有的元素重复以上的步骤,除了最后一个。
  4. 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

        

         1. 根据算法原理我们可以写一个比较简单的算法(这个不是最优的,因为可能循环没有结束的时候,就已经有序了)。

        public void sort(int[] array){
         for(int i=0;i<array.length;i++){
             for(int j=0;j<array.length-1-i;j++){
                 if(array[j]>array[j+1]){
                      temp=array[j];
                      array[j]=array[j+1];
                      array[j+1]=temp;
                  }
              }

          System.out.println(Arrays.toString(array));
          }
    } 

      public static void main(String[] args){
            int[] array={5,7,9,4,8};
            new Bubbling().sort(array);
      }


       以下是输出结果:

              [5, 7, 4, 8, 9]
              [5, 4, 7, 8, 9]
              [4, 5, 7, 8, 9]
              [4, 5, 7, 8, 9]
              [4, 5, 7, 8, 9]

                

           其实通过结果不难发现,再循环到第四次的时候,这个结果已经有序了,不用再进行第五次的循环了。


           2.我们可以改进我们的算法,让他在已经有序的时候,不在进行循环。

              我们可以加一个boolean参数,每次外层循环开始的时候把他设为false,只要这次内循环有移动,就把它设为true,如何内循环没有发生移动,就可以打断外层循环,排序结束。


            public void sort(int[] array){
                for(int i=0;i<array.length;i++){
                     isMove=false;
                     for(int j=0;j<array.length-1-i;j++){
                            if(array[j]>array[j+1]){
                                 temp=array[j];
                                 array[j]=array[j+1];
                                 array[j+1]=temp;
                                 isMove=true;
                              }
                       }
                       if(!isMove){
                            break;
                       }

                System.out.println(Arrays.toString(array));
                }
        }
    
        public static void main(String[] args){
                int[] array={5,7,9,4,8};
                new Bubbling().sort(array);
        }

    

       以下是输出结果:

        [5, 7, 4, 8, 9]
        [5, 4, 7, 8, 9]
        [4, 5, 7, 8, 9]



   

          

   




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值