Java代码实现:交换排序之冒泡排序

1、没有优化的版本,多少个元素进行多少轮冒泡:
public class SixSortTest {
    /**
     * 第一个冒泡排序;按照升序排列
     * @param data 传入要排序的数组
     */
    public static void bubbleSort(int[] data){
        int n = data.length;
        if (n <= 1){
            return;
        }
        for (int i = 0;i < n;i++){
            for (int j = 0;j < n-1;j++){
                if (data[j] > data[j+1]){
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
            }
        }
    }
2、优化之后的版本:这种优化点视情况而定,就是如果一组元素,比如说12354678,这种,第一次第一轮冒泡后就是12345678,已经是有序的数组,但是原来的那种方式还是要进行8轮冒泡,这样很耗费时间,我们可以加上一个标记,如果有一轮冒泡没有交换元素,说明数组已经排序好了;

代码如下:

 public static void bubbleSort(int[] data){
        long start = System.currentTimeMillis();
        int n = data.length;
        for (int i = 0;i < n;i++){
            for (int j = 0;j < n-i-1;j++ ){
            //此处加上标志位,
                boolean flag = false;
                if (data[j] > data[j+1]){
                    flag = true;
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
                //此处每一轮都要判断,
                //如果flag没有变成true ,则直接停止循环,当前数组已经排序完成
                if (!flag){
                    break;
                }
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("冒泡排序耗时"+(end-start)+"毫秒");
    }
3、下面比较一下不加标志位时以及加上标志位时,排序近乎有序数组时的耗时:

第一个无优化排序近乎有序数组耗时
在这里插入图片描述
第二个:数组不变,加上标志位:
在这里插入图片描述
前者耗时10726秒,后者只需要8秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值