数据结构与算法:冒泡排序

原理

从前到后,连续相连两个数对比,如果前一个数大于后一个数,则交换。

第一次:
arr[0] 和 arr[1] 对比,若arr[0] 大于 arr[1], 交换两个值。
arr[1] 和 arr[2]对比,若arr[1] 大于 arr[2], 交换两个值。
arr[2] 和 arr[3]对比,若arr[2]大于 arr[3],交换两个值。

arr[i] 和 arr[i +1]对比,若arr[i]大于 arr[i+1],交换两个值。
arr[n-2]和arr[n-1]对比,若arr[n-2]大于arr[n-2],交换两个值。

至此,arr[n-1]存储的是最大值。

第二次:
确定出 arr[n-2]的值。

第n-1次:
确定出 arr[1]的值,同时确定了arr[0]的值。

图解

在这里插入图片描述

复杂度

时间复杂度 O(n²)
额外空间复杂度 O(1)

代码实现

java 版本
public static void bubbleSort(int[] array) {  
    if (array == null || array.length < 2) {  
        return;  
    }  
  
    for (int i = 0; i < array.length; i ++) {  // 控制第几次循环  
        for (int j = 0; j < array.length - i - 1; j ++) {  // 控制循环的范围  第一次 是 0 到 n-1, 第二次是 0 到 n -2            if (array[j] > array[j + 1]) {  
                swap(array, j, j +1);  
            }  
        }  
    }  
}
kotlin版本
fun bubbleSort(array: IntArray) {  
    if (array.size < 2) {  
        return  
    }  
  
    for (i in array.indices.reversed()) {  // i 从 N-1 到 0        for (j in (0) until i) {  
            if (array[j] > array[j + 1]) {  // 每次把最大的冒到最后。  
                // 把最小的值换到最前边来。  
                swap(array, j, j + 1)  
            }  
        }  
    }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值