冒泡排序算法

本文介绍了冒泡排序的基本概念和工作原理,通过实例详细解析了冒泡排序的过程。冒泡排序是一种简单的排序算法,通过多轮比较使数组元素按升序或降序排列。文章还提供了Java代码实现冒泡排序的例子,并总结了排序过程中的规律,包括外层循环次数和内层循环次数的确定。最后,给出了升序排列的口诀帮助理解该算法。
摘要由CSDN通过智能技术生成

java算法基础——冒泡排序算法

冒泡排序是数组元素按照升序或者降序基础的算法之一。也是学习算法需要掌握排序算法最为基础的一种。那什么是冒泡排序呢?基于字面意思,“冒泡”即是数组最小的那个元素往上冒,在往上冒的过程和相邻的元素进行位置交换。如下举例说明:

例:在整数数组int[] nums={22,15,33,10,12},经过4次比较,最大的元素33下层到数组最底部,小于33的元素往上“冒”。经过多次循环比较,将最终得到数组从小到大升序排列。

第一轮比较顺序如下:
1. nums[0]=22与nums[1]=15进行比较,22>15,进行位置交换,交换后nums[0]=15,nums[1]=22;
2. nums[1]=22与nums[2]=33进行比较,22<33,不进行交换,nums[1]=22,nums[2]=33;
3. nums[2]=33与nums[3]=10进行比较,33>10,进行位置交换,交换后num[2]=10,nums[3]=33;
4. nums[3]=33与nums[4]=12进行比较,33>12,进行位置交换,交换后nums[3]=12,num[4]=33.

冒泡排序原理说明

那么问题来了,要比较多少轮,每轮要比较多少次呢?

注意观察第一轮比较,数组nums长度是5,比较了4次;
那么第二轮比较不需要在和33进行比较,因此只比较3次;
依次第三轮不需要和22进行比较,只比较2次;
第四轮不需要和15比较,只需要比较1次。
最终进过4轮比较结果如下图所示:(注意:第四轮,10比12小,因此没有进行交换。如果将12换成8,则10要和8进行交换)
冒泡排序原理说明
对规律进行归纳:

1、对于数组int[] nums,数组长度为 nums.length,则比较的轮数是 i=nums.length-1 轮
2、每轮比较的次数 j=nums.length-1-i

对于上述案例用代码实现:

public class BubbleSort {
    public static void main(String[] args) {
        int[] nums = {22, 15, 33, 10, 12};//创建数组nums= {22, 15, 33, 10, 12}
        System.out.println("打印输出初始状态数组"+Arrays.toString(nums));
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums.length - 1 - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    int temp = nums[j + 1];
                    nums[j + 1] = nums[j];
                    nums[j] = temp;
                }
            }
        }
        System.out.println("打印输出排序后数组"+Arrays.toString(nums));
    }
}

排序结果如下图:
输出结果

最后用一个口诀总结一下:

升序排列的口诀:
N个数字来排队
两两相比小靠前,
外层 循环次数:i=length-1
内层循环次数:j=length-i-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值