[数据结构与算法] 冒泡排序动画及 Java 代码实现

目录

1. 冒泡排序动画 

2. 冒泡排序 Java 实现

3. 总结

时间复杂度

空间复杂度

排序稳定性


1. 冒泡排序动画 

 

2. 冒泡排序 Java 实现

public void bubbleSort(int[] numbers) {
    int length = numbers.length;
    if (length <= 1) {
        return;
    }

    for (int i = 0; i < length; ++i) {
        // 数据交换的标记,表示当前循环是否有数据交换
        boolean swapFlag = false;

        for (int j = 0; j < length - i - 1; ++j) {
            // 相邻位置两两比较
            if (numbers[j] > numbers[j + 1]) {
                // 前面数字大于后面,则交换位置
                numbers[j] ^= numbers[j + 1];
                numbers[j+1] ^= numbers[j];
                numbers[j] ^= numbers[j + 1];

                // 本次循环有数据交换,标记设为 true
                swapFlag = true;
            }
        }

        if (!swapFlag) {
            // 没有数据交换,提前退出
            break;
        }
    }
}

 

3. 总结

时间复杂度

最好情况下,数据已经是有序的,时间复杂度 O(n)

最坏情况下,数组为逆序数组,时间复杂度 O(n^2)

冒泡排序时间复杂度 O(n^2)

 

空间复杂度

数据交换在原数组中进行,标记位使用常数级的空间,所以空间复杂度 O(1)

 

排序稳定性

判断 a[j] > a[j+1] ,只有当 a[j] > a[j+1] 时才交换顺序

相同大小的数据在排序前后不会改变顺序,所以冒泡是稳定排序

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值