Java冒泡排序

冒泡排序

对要进行排序的数据中相邻的数据进行两两比较,将小数放在前面,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序。

public class Main {
    public static void main(String[] args) {
        int[] arr={15,18,55,21,36,12};
        System.out.println("排序前:");
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        //冒泡排序算法
        int count=0;//用于计数,记录交换次数
        int temp=0;//用于交换
        for (int j=0;j<arr.length-1;j++){
            boolean flag=false; //立一个标准
            for(int i=arr.length-1;i>0;i--) {
                if (arr[i] < arr[i - 1]) {
                    temp = arr[i];
                    arr[i] = arr[i - 1];
                    arr[i - 1] = temp;
                    flag=true; //判断是否发生交换
                }
                count++;//每交换一次+1
            }
        }
        System.out.println();
        System.out.println("排序后:");
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.println("总共交换了"+count+"次");
    }
}
排序前:
15 18 55 21 36 12 
排序后:
12 15 18 21 36 55 
总共交换了25次

但是这样的时间复杂度很高,因为每次循环排没排序好都会从头到尾进行两两比较

当一次比较完之后没有进行交换,说明当前的数已经排序好了,我们可以跳过当前循环到下一次循环,节省时间提高效率

public class Main {
    public static void main(String[] args) {
        int[] arr={15,18,55,21,36,12};
        System.out.println("排序前:");
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        //冒泡排序算法
        int count=0;//用于计数,记录交换次数
        int temp=0;//用于交换
        for (int j=0;j<arr.length-1;j++){
            boolean flag=false; //立一个标准
            for(int i=arr.length-1;i>0;i--) {
                if (arr[i] < arr[i - 1]) {
                    temp = arr[i];
                    arr[i] = arr[i - 1];
                    arr[i - 1] = temp;
                    flag=true; //判断是否发生交换
                }
                if (!flag){ //如果没有发生交换则结束当前循环
                    continue;
                }
                count++;//每交换一次+1
            }
        }
        System.out.println();
        System.out.println("排序后:");
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.println("总共交换了"+count+"次");
    }
}
排序前:
15 18 55 21 36 12 
排序后:
12 15 18 21 36 55 
总共交换了14次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值