【算法】冒泡排序

1、排序逻辑

1.1 原理

        它的原理就是比较相临的2个元素,大的元素放到右边

1.2 思路

        依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

    (1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。

    (2)比较第2和第3个数,将小数 放在前面,大数放在后面。

    ......

    (3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成

    (4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。

    (5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。

    (6)依次类推,每一趟比较次数减少依次

2、算法分析

2.1排序逻辑总结:

        N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数

2.2 时间复杂度

数据正序:只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。

数据逆序:则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

综上所述:冒泡排序总的平均时间复杂度为:O(n2) ,时间复杂度和数据状况无关。

3、code

3.1 java

public class Code02BubbleSort {
    public static void main(String[] args) {
        int[] arr = {1, 60, 13, 40, 15, 6, 7, 8, 9, 10};
        bubbleSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static void bubbleSort(int[] arr) {
        for (int i = arr.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr, j, j + 1);
                }
            }
        }

    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

3.2 python

def bubble_sort(arr):
    for i in range(len(arr)):
        for j in range(len(arr) - 1 - i):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]


if __name__ == '__main__':
    arr = [1, 3, 20, 15, 43, 6, 2, 8, 90, 10]
    bubble_sort(arr)
    print(arr)

相关推荐

  1. 排序算法——冒泡排序

    2023-12-17 10:50:06       42 阅读
  2. 排序算法冒泡排序

    2023-12-17 10:50:06       25 阅读
  3. 排序算法-冒泡排序

    2023-12-17 10:50:06       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 10:50:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 10:50:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 10:50:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 10:50:06       20 阅读

热门阅读

  1. C语言学习第二十四天(预处理)

    2023-12-17 10:50:06       40 阅读
  2. 数据结构:双链表

    2023-12-17 10:50:06       54 阅读
  3. 在Visual Studio中进行嵌入式ARM设备的调试

    2023-12-17 10:50:06       35 阅读
  4. Ubuntu下安装ONNX、ONNX-TensorRT、Protobuf和TensorRT

    2023-12-17 10:50:06       42 阅读
  5. 牛客小白月赛83

    2023-12-17 10:50:06       40 阅读
  6. C语言指针3

    2023-12-17 10:50:06       36 阅读
  7. 用单片机控制步进电机的程序

    2023-12-17 10:50:06       41 阅读