JavaSE基础 - 数组排序之冒泡排序

本文详细介绍了冒泡排序的原理及实现过程,并通过实例演示了排序的过程。此外还提供了冒泡排序的两种Java实现代码,包括基本实现和改进后的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序的原理:每次把最大(或最小)的那个数,通过里层的循环冒泡到末端,然后通过外层循环对剩下的数再进行一次(重复)冒泡操作。

冒泡排序的时间复杂度:冒泡排序的最好情况下时间复杂度为;最坏的情况下时间复杂度为

冒泡排序的次数:N个数比较N-1遍。(未改进的情况下)

现在,我用数组元素为:89,-3,43,12,69 为例(递增排序)图解。


过程解释:

第一次:89大于后面的数,冒泡到最末端,得到第一次比较最大的数89.

第二次:-3 < 43,位置不变;43 > 12,交换位置;43 < 69,位置不变。得到第二次比较最大的数69.

第三,四次:可以发现,虽然第三次已经有序,但是还要走第四次。

最终得到排序数组:-3,12,43,69,89.

代码如下:

public class BubbleSort
{
    public void sort(int[] a)
    {
        int temp = 0;
        for (int i = a.length - 1; i > 0; --i)
        {
            for (int j = 0; j < i; ++j)
            {
                if (a[j + 1] < a[j])
                {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }
}

图解过程中,我们发现,第三次排序时,数组已经有序,但是还是要继续冒泡,无疑增加了时间复杂度,如果我们能在数组已经有序的时候就结束循环,岂不是更好.

冒泡排序的改进:改进在数组排序过程未完成,而数组已经有序列的情况下,结束循环。代码如下:

public static void bubbleSort(int[] list)
{  
    boolean isSorted = true;	//添加有序标志。
    for (int i = 0; i < (list.length - 1) && isSorted; i++)
	{  
        isSorted = false;  
        for (int j = 0; j < (list.length - 1 -i); j++)
		{  
            if (list[j] > list[j + 1])
			{  
                int temp = list[j];  
                list[j] = list[j + 1];  
                list[j + 1] = temp;  
                isSorted = true;
            }  
        }  
    }  
}  

若某次循环时,内层循环的if语句未被执行,则isSorted = false.外层循环的条件不满足,终止循环。


总结:冒泡循环是排序算法中最为基础的,掌握并理解它是必不可少的。希望我的文章对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值