• 经典算法之冒泡排序(Bubble Sort)


    在这里插入图片描述

    活动地址:CSDN21天学习挑战赛

    冒泡排序

           冒泡排序是一种比较简单的排序算法,我们可以重复遍历要排序的序列,每次比较两个元素,如果他们顺序错误就交换位置,重复遍历到没有可以交换的元素,说明排序完成。

    算法原理

    • 从第一个元素开始,比较相邻的两个元素,如果第一个大于第二个,则交换它们
    • 对每一对相邻的元素做相同的操作,从第一对到最后一对,最终最后一位元素就是最大值
    • 对每一个元素重复上述步骤,最后一个除外。

    动图演示

    在这里插入图片描述

    算法练习

    题目描述: 给定一个无序数组,利用冒泡排序将数组按升序排列。

    示例一:

    输入: arrs= [5,0,9,3,-1,12]
    输出: arrs= [-1,0,3,5,9,12]
    
    • 1
    • 2

    示例二:

    输入: arrs= [3,5,9,7,2,1]
    输出: arrs= [1,2,3,5,7,9]
    
    • 1
    • 2

    解题思路:

    通过比较相邻的元素,如果前一个比后一个大,则交换位置。

    • 第一趟:比较第1个和第2个元素,然后是第2个和第3个比较,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
    • 第二趟:重复上面步骤,将第二大的数交换至倒数第二位。
    • 每一趟都会将元素中第 n 大的元素交换到倒数第 n 位。
    • 一共需要n-1趟。

    代码实现:

    public class BubbleTest {
        public static void main(String[] args) {
            Integer[] arr = {3,5,9,7,2,1};
            Bubble.sort(arr);
            System.out.println(Arrays.toString(arr));
        }
        //数组排序
        public static void bubblesort(Comparable[] a){
            for (int i = a.length - 1;i > 0;i--){
                for (int j = 0;j < i;j++){
                    if (greater(a[j],a[j + 1])){
                        swap(a,j,j + 1);
                    }
                }
            }
        }
        //比较 v 是否大于 w
        public static boolean greater(Comparable v,Comparable w){
            return v.compareTo(w) > 0;
        }
        //数组元素交换位置
        private static void swap(Comparable[] a,int i,int j){
            Comparable temp;
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    算法分析

    • 时间复杂度

           冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。
           而对于有n个元素的数列它的比较次数为 (n-1) + (n-2) + … + 1 = n * (n - 1) / 2;因此它的时间复杂度为O(n^2)。

    • 空间复杂度

           冒泡排序的辅助变量只是一个临时变量,不会随数组规模的增大而增大,所以冒泡排序的空间复杂度为O(1)。

    在这里插入图片描述

  • 相关阅读:
    软件架构设计与需求分析方法论
    Java 解压文件
    深度学习-了解
    [学习笔记]Python for Data Analysis, 3E-1.序言
    springboot-RedisTemplate
    App出海起量难?传参安装打开获客增长新途径
    科技的成就(三十)
    千亿赛道,MCU背后的国产化浪潮(附国内厂家名单)-MCU国产化发展线上研讨会
    Pandas 内置的 10 种画图方法
    Multiplexer and Demultiplexer(多路复用器和解复用器)
  • 原文地址:https://blog.csdn.net/weixin_52986315/article/details/126298003