排序(1)-冒泡排序

 

图解:

175738_dYoj_3735426.png

 

冒泡排序基本概念:
     依次比较相邻的两个数,将小数放在前面,大数放在后面。
     即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
     然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,
     直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,
     将最大的数放到了最后。在第二趟:仍从第一对数开始比较
     (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),
     将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),
     第二趟结束,在倒数第二的位置上得到一个新的最大数
     (其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

 

代码:

import java.util.Arrays;
/** * 实现冒泡排序 *@authordell * */
public class BubbleSort{
    public static void main(String[] args) {
        int[] arr = {1,200,19,55,10,22,3,7};
       // API实现Arrays.sort(arr);
          System.out.println(Arrays.toString(arr));
        // 冒泡实现
         int temp;
         for(int i =0;i<arr.length-1;i++){
             for(int j =0;j<arr.length-1-i;j++){
                 if(arr[j]>arr[j+1]){
                        temp = arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                   }
             }
         }
         System.out.println(Arrays.toString(arr));
    }
}

冒泡排序优化1:  

     有的冒泡经过第一轮的交换已经是有序的了,如:2 1 3 4 5。数据越多的时候越慢,非常不适合大数据的排序.

解决办法一:

    如果用一个flag来判断一下,当前数组是否已经有序,如果有序就退出循环,这样可以明显的提高冒泡排序的性能.

import java.util.Arrays;
/** * 实现冒泡排序 *@authordell * */
public class BubbleSort {
    public static void main(String[] args) {
        boolean flag ;
        int[] arr = {2, 1, 3, 4, 5};
        int temp;
        for (int i = 0; i < arr.length - 1; i++) {
            System.out.println("i="+i);
            flag = true;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flag = false;
                }
            }
            if (flag) {//没有发生交换则退出循环;
                break;
            }

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

控制台:

214831_MnHt_3735426.png

如果没有优化,代码如下:

import java.util.Arrays;
/** * 实现冒泡排序 *@authordell * */
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {2, 1, 3, 4, 5};
        int temp;
        for (int i = 0; i < arr.length - 1; i++) {
            System.out.println("i="+i);
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

控制台:

214953_qCZ7_3735426.png

如上,只是一种优化方式,仅作为参考。

转载于:https://my.oschina.net/u/3735426/blog/1581752

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值