冒泡排序的实现和一些对于冒泡排序的优化

冒泡排序就是通过for嵌套,来声明循环次数,并检索每一次循环的值,如果前者大于后者,则将他往后面冒。

import java.util.Arrays;

public class Bubble_optmize {
    public static void main(String[] args) {
        // 直接定义一个数组
        int[] nums = {36, 26, 27, 2, 4, 19, 50, 48};
        System.out.println("排序前的数组:" + Arrays.toString(nums));
        sort(nums);
        System.out.println("排序后的数组:" + Arrays.toString(nums));
    }

    /*
     * 对数组进行冒泡排序
     *
     * @param nums 需要排序的数组
     * */
    private static void sort(int[] nums) {
        // 记录最后一个交换的位置
        int pos = 0;
        // 临时变量 temp
        int temp = 0;
        // 外层循环控制排序趟数,len个进行len - 1趟
        boolean flag =true;//定义一个标志位,用来判断是否完成了排序
        for (int i = 0; (i < nums.length - 1)&&flag; i++) {
            System.out.println("第" + (i + 1) + "趟:");
            // 标记位
            flag = false;//假设我们已经完成了排序
            // 内层循环控制比较的次数,第i趟比较i-1次
            for (int j = 0; j < nums.length - 1 - i; j++) {
                // 比较相邻的两个元素,若前面的数字大于后面的,交换位置
                if (nums[j] > nums[j + 1]) {
                    temp = nums[j + 1];
                    nums[j + 1] = nums[j];
                    nums[j] = temp;
                    flag = true;
                    // 如果能走到这里说明有有元素交换,还不是有序的,标记为false
                    // 最后一次交换元素的位置
                    pos = j;
                }
                System.out.println("    第" + (j + 1) + "次:" + Arrays.toString(nums));
                }
            }
        System.out.println("最后发生交换的位置"+pos);

    }
}


对于代码当中的flag,是设置一个标记位,用来标识,此次有没有进行循环,若没有,则证明已经排序好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值