首页 > 编程语言 >详解十大经典排序算法(一):冒泡排序

详解十大经典排序算法(一):冒泡排序

时间:2023-12-01 14:06:49浏览次数:33  
标签:arr 遍历 复杂度 元素 冒泡排序 详解 排序


算法原理

冒泡排序通过多次遍历数组,比较相邻元素并交换,逐步将最大值(或最小值)"冒泡"到数组的一端。


算法描述

冒泡排序是一种简单的排序算法,它重复地遍历待排序的元素,比较相邻的两个元素,并根据需要交换它们的位置,直到整个序列排序完成。

冒泡排序的基本思想是通过相邻元素的比较和交换,将较大的元素逐渐“冒泡”到右侧,从而实现排序。具体步骤如下:

  1. 从序列的第一个元素开始,比较相邻的两个元素。
  2. 如果前一个元素大于后一个元素,则交换它们的位置。
  3. 继续比较下一对相邻元素,重复步骤2,直到遍历到序列的倒数第二个元素。
  4. 重复步骤1-3,直到没有任何一对元素需要比较和交换,即序列已经排序完成。


动画演示

详解十大经典排序算法(一):冒泡排序_冒泡排序


代码实现

 public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换arr[j]和arr[j+1]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }


算法复杂度

时间复杂度(最坏)

时间复杂度(最好)

时间复杂度(平均)

空间复杂度

稳定性

O(n^2)

O(n)

O(n^2)

O(1)

稳定


冒泡排序的优化方式:

  1. 设置一个标志位,如果某一趟遍历中没有发生元素交换,则说明序列已经有序,可以提前结束排序。
  2. 记录每一趟遍历中最后一次发生元素交换的位置,下一趟遍历只需要比较到该位置即可,因为该位置之后的元素已经有序。







标签:arr,遍历,复杂度,元素,冒泡排序,详解,排序
From: https://blog.51cto.com/xaye/8644612

相关文章

  • 使用Unity Localization插件进行项目本地化实战详解
    在使用Unity开发游戏的过程中,本地化是必不可少的。网络上也有很多的本地化工具,本次我介绍的是Unity官方提供的Localization插件,大家可以在PackageManager进行安装 一、语言配置,本地化表创建在ProjectSetting中找到Localization,(需要先创建这个LocalizationSetting文件)点击L......
  • 【直播协议详解】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别
    本期我们详细讨论直播的相关协议,包括:HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。我们将会详细介绍这些协议的工作原理、应用场景、及延迟的原因。我们按这样的顺序讨论​:RTMP、HTTP-FLVHLSWeb-RTCRTSP一、RTMP、HTTP-FLV协议RTMP和HTTP-FLV都是建立在FLV封装之上的。RTM......
  • 简化版Transformer :Simplifying Transformer Block论文详解
    在这篇文章中我将深入探讨来自苏黎世联邦理工学院计算机科学系的BobbyHe和ThomasHofmann在他们的论文“SimplifyingTransformerBlocks”中介绍的Transformer技术的进化步骤。这是自Transformer开始以来,我看到的最好的改进。大型语言模型(llm)可以通过各种扩展策略扩展其功......
  • 微信小程序开发的聚合函数排序.aggregate.sort
    //普通查询用.orderBy('add_time','desc'),聚合查询用.sort({ins_time:-1})'usestrict';constdb=uniCloud.database()//对数据库的对象获取;exports.main=async(event,context)=>{ letstart=newDate().getTime(); constcollection=db......
  • Unity 最新DOTS系列之《Baking与Baker的详解》
    UnityDOTSBaking与Baker详解UnityDOTSBaking与Baker详解最近DOTS终于发布了正式的版本,我们来分享一下DOTS里面Baking与Baker的关键概念,方便大家上手学习掌握UnityDOTS开发。UnityDOTS开发模式,为了让大家在”创作”游戏的时候使用原来组件方式来编辑游戏场景与资源,同......
  • 时间复杂度为 O(n^2) 的排序算法
    对于小规模数据,我们可以选用时间复杂度为O(n2)的排序算法。因为时间复杂度并不代表实际代码的执行时间,它省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下,O(n2)的排序算法可能会比O(nlogn)的排序算法执行效率高。不过随着数据规模增大,O(nlogn)的排序算法是......
  • SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解
    SQLSELECTINTO语句SELECTINTO语句将数据从一个表复制到一个新表中。SELECTINTO语法将所有列复制到新表中:SELECT*INTOnewtable[INexternaldb]FROMoldtableWHEREcondition;只复制一些列到新表中:SELECTcolumn1,column2,column3,...INTOnewtable[INexte......
  • SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解
    SQLSELECTINTO语句SELECTINTO语句将数据从一个表复制到一个新表中。SELECTINTO语法将所有列复制到新表中:SELECT*INTOnewtable[INexternaldb]FROMoldtableWHEREcondition;只复制一些列到新表中:SELECTcolumn1,column2,column3,...INTOnewtable[INext......
  • Linux文件管理详解
    Linux文件系统的体系结构
Linux文件系统采用层次结构,从根目录(/)开始,包含多个子目录和文件。文件系统之间通过虚拟文件系统(VFS)进行通信,VFS使得Linux可以支持多个不同的文件系统,每个表示一个VFS的通用接口。Linux文件系统组成
Linux文件系统主要由以下几部分组成:1.文件:文件是存......
  • SSL——ASA防火墙——Cisco实验(详解)
    SSLVPN一、理论部分定义:SSLVPN,操作在OSI模型的会话层,可以使用户通过浏览器对VPN进行连接,但是没有隧道。使用https加密的范式进行数据传输,跨平台性强,只要终端设备有浏览器,能够上网,就可以进行VPN连接,并访问资源。扩展:可以通过DNS进行访问,或者使用花生壳注册免费域名进行访问ssl(......