经典算法之冒泡排序(两种方式java 实现)

   1. 冒泡排序(含两种实现方式)

基本思路:比较相邻两个元素的大小,将数值大的放在左边。

跑第一趟  假如下标为0的元素比下标为1的元素的值要大,两元素进行交换,将大的交换到左边

然后再用下标为1的与下标为2比较,就这样两相邻元素依次进行比较,将较大的放在左边。

重复第一趟步骤直到排序完成。

下面我们来模拟一下冒泡排序假设有数组{35,56,34,22,16}

第一趟排序:

             第一次排序:35和56比较,56更大这里我们什么都别管  顺序为:35,56,34,22,16

             第二次排序:56和34比较,56更大我们让56和34交换  顺序:35,34,56,22,16

             第三次排序:  56和22比较,56更大,交换位置             顺序:35,34,22,56,16

             第四次排序:  56比16比较,56更大,交换位置             顺序:  35,34,22,16,56

             第一趟比较了四次

第二趟排序:

               第一次排序:35和34比较,35更大,交换位置           顺序:34,35,22,16,56

               第二次排序:35和22比较,35更大,交换位置           顺序:34,22,35,16,56

               第三次排序:35和16比较,35更大,交换位置            顺序:34,22,16,35,56

               第二趟比较了三次

第三趟排序:

                第一次排序:34和22比较,34更大,交换位置           顺序:22,34,16,35,56

                 第二次排序:34和16比较,34更大,交换位置           顺序:22,16,34,35,56

                 第三趟比较了两次

第四趟排序: 

                第一次排序:22和16比较,22更大,交换位置            顺序:16,22,34,35,56

                第四趟比较了一次

最终顺序:16,22,34,35,56

由此可见假设有N个元素,要跑N-1趟,每i趟要比较N-i次,所以可用双重循环,外层控制走的趟数,内层负责比较的次数

附上代码:


public class Bubblesort1{

 public static void main(String[] args) {

      int temp;

    int a[]=new int[] {35,56,34,22,16};

     for(int i=0;i<a.length-1;i++){

      for(int j=0;j<a.length-1-i;j++){

        if(a[j]>a[j+1]){

            temp=a[j];

            a[j]=a[j+1];

           a[j+1]=temp;

        }

      }

      }

                for(int i=0;i<a.length;i++) {
                  System.out.print(a[i]+" ");

                }

  }

}   
     public class Bubblesort2 {
                     /*冒泡2*/
              public static void main(String[] args) {
               // TODO Auto-generated method stub
                        int temp;
                   int a[]=new int[] {35,56,34,22,16,45,66,33};
                          for(int i=0;i<a.length-1;i++) {
                             for(int j=a.length-1;j>0;j--) {
                              if(a[j]<a[j-1]) {
                                 temp=a[j];
                                a[j]=a[j-1];
                               a[j-1]=temp;
                             }
                          }
                         }
                        for(int i=0;i<a.length;i++) {
                           System.out.print(a[i]+" ");

                       }

            }

         }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值