冒泡排序算法

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它的基本思想是:对所有相邻记录的关键字进行比较,若不满足要求(升序或逆序),则将其交换,直到所有记录排好为止

冒泡排序一般来说就是从左往右扫描数据,选择最大的数据,放在右边;冒泡排序是一种稳定的排序方法,关键字的比较次数和记录的交换次数与记录的初始顺序有关

要点: 比较相邻的两个数,如果左边的数大于右边的数,就进行交换

测试用例: 使用冒泡排序算法将数组 数组 { 4,2,8,0,5,7,1,3,6,9 } 进行升序排序

在这里插入图片描述

代码实现

    /**
     * 冒泡排序
     * 最好情况的时间复杂度是O(n),也就是只出现外循环的情况
     * 最坏的情况时间复杂度是O(n^2),也就是外循环次数与内循环次数递减相乘
     * 空间复杂度为O(1),因为需要一个记录大小的辅助空间用于交换temp
     * @param nums 数组
     * @param size 数组大小
     * @return 返回排列好的数组
     */
    public int[] bubbleSort(int[] nums, int size) {

        int i, j;
        int temp;
        boolean flag = true;    // 用来判断是否已经完成循环,不需要再比较
        for (i = 1;  i < size && flag; i++) {   // 外循环,循环数组列表
            // 每次外循环终会有一个元素已经被排好,所以每次内循环比较的次数是size-i
            flag = false;   // 每次比较进行初始化flag标志,true意味着还需要循环,false不需要再循环
            for (j = 0; j < size-i; j++) {
                if (nums[j+1] < nums[j]){
                    temp = nums[j];     // temp用来存放比较大的元素
                    nums[j] = nums[j+1];    // 按照小的在前,大的在后,交换元素顺序
                    nums[j+1] = temp;
                    flag = true;        // 如果出现了交换操作,修改flag为true
                }
            }
        }
        return nums;
    }

时间复杂度
最好的情况是,初始序列有序,比较次数为n-1,交换次数为0,因此最好情况的时间复杂度为 O ( n ) O(n) O(n);最坏情况是,初始序列为逆序,比较次数和交换次数均为: n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2 = 1 2 n 2 \frac{1}{2}n^2 21n2 - 1 2 n \frac{1}{2}n 21n = ∑ i = 1 n − 1 ( n − i ) \sum_{i=1}^{n-1} (n-i) i=1n1(ni),因此最坏情况时间复杂度为 O ( n 2 ) O(n^2) O(n2)

空间复杂度
在冒泡排序过程中,只需要一个记录大小的辅助空间用于交换,因此空间复杂度为O(1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naijia_OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值