最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java排序算法中的冒泡排序算法實(shí)現(xiàn)

 更新時(shí)間:2023年12月12日 09:24:01   作者:warybee  
這篇文章主要介紹了Java排序算法中的冒泡排序算法實(shí)現(xiàn),冒泡排序只會(huì)操作相鄰的兩個(gè)數(shù)據(jù),每次冒泡操作都會(huì)對(duì)相鄰的兩個(gè)元素進(jìn)行比較,看是否滿足大小關(guān)系要求,如果不滿足就讓它倆互換,需要的朋友可以參考下

Java冒泡排序算法

1、冒泡排序原理

冒泡排序只會(huì)操作相鄰的兩個(gè)數(shù)據(jù)

每次冒泡操作都會(huì)對(duì)相鄰的兩個(gè)元素進(jìn)行比較,看是否滿足大小關(guān)系要求。

如果不滿足就讓它倆互換。一次冒泡會(huì)讓至少一個(gè)元素移動(dòng)到它應(yīng)該在的位置,重復(fù) n 次,就完成了 n 個(gè)數(shù)據(jù)的排序工作。

如果我們要對(duì)一組數(shù)據(jù) 4,5,6,3,2,1從小到到大進(jìn)行排序,第一次冒泡操作的詳細(xì)過程就是這樣

  • 4和5比較,4小于5,不進(jìn)行位置交換,結(jié)果:[4,5,6,3,2,1]
  • 5和6比較,5小于6,不進(jìn)行位置交換,結(jié)果:[4,5,6,3,2,1]
  • 6和3比較,6大于3,進(jìn)行位置交換,結(jié)果:[4,5,3,6,2,1]
  • 6和2比較,6大于2,進(jìn)行位置交換,結(jié)果:[4,5,3,2,6,1]
  • 6和1比較,6大于1,進(jìn)行位置交換,結(jié)果:[4,5,3,2,1,6]

要想完成所有數(shù)據(jù)的排序,只要進(jìn)行 6 次這樣的冒泡操作就可以了:

冒泡次數(shù)冒泡后的結(jié)果
初始狀態(tài)[ 4 ,5,6,3, 2, 1]
第一次 冒泡[ 4 ,5,3,2, 1, 6]
第二次 冒泡[ 4 ,3,1,1, 5, 6]
第三次 冒泡[ 3 ,2,1,4, 5, 6]
第四次 冒泡[ 2 ,1,3,4, 5, 6]
第五次 冒泡[ 1,2,3,4, 5, 6]
第六次 冒泡[ 1,2,3,4, 5, 6]

2、代碼實(shí)現(xiàn)

 *  從小到大排序
     * @param a
     * @return
     */
    public static int[] bubbleSort(int[] a){
        if (a.length<=1)
            return a;
        //外層for總共冒泡操作的次數(shù)
        for (int i=0;i<a.length-1;i++){
            //內(nèi)層for  兩個(gè)元素的交換
            for (int j=0;j<a.length-i-1;j++){
                if (a[j]>a[j+1]){
                    //交換數(shù)據(jù)
                    int tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
        }
        return a;
    }

3、冒泡排序優(yōu)化

通過上圖,我們發(fā)現(xiàn)在第五次冒泡操作后,已經(jīng)沒有數(shù)據(jù)交換,這時(shí)已經(jīng)達(dá)到完全有序,不用再繼續(xù)執(zhí)行后續(xù)的冒泡操作,我們可以通過添加一個(gè)標(biāo)識(shí)符,來判斷當(dāng)前是否還有數(shù)據(jù)交換

經(jīng)過優(yōu)化,對(duì) 4,5,6,3,2,1這組數(shù)據(jù)排序,只需執(zhí)行5次冒泡操作。

冒泡次數(shù)冒泡后的結(jié)果是否有數(shù)據(jù)交換初始狀態(tài)
初始狀態(tài)[ 4 ,5,6,3, 2, 1]----
第一次 冒泡[ 4 ,5,3,2, 1, 6]
第二次 冒泡[ 4 ,3,1,1, 5, 6]
第三次 冒泡[ 3 ,2,1,4, 5, 6]
第四次 冒泡[ 2 ,1,3,4, 5, 6]
第五次 冒泡[ 1,2,3,4, 5, 6]

代碼實(shí)現(xiàn):

/**
     *  從小到大排序
     * @param a
     * @return
     */
    public static int[] bubbleSort(int[] a){
        if (a.length<=1)
            return a;
        //外層for總共冒泡操作的次數(shù)
        for (int i=0;i<a.length-1;i++){
            //標(biāo)識(shí)當(dāng)前冒泡操作是否有數(shù)據(jù)交換
            boolean flag=false;
            //內(nèi)層for  兩個(gè)元素的交換
            for (int j=0;j<a.length-i-1;j++){
                if (a[j]>a[j+1]){
                    //交換數(shù)據(jù)
                    int tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                    flag=true;
                }
            }
            //如果數(shù)據(jù)已經(jīng)有序,無需再執(zhí)行冒泡操作
            if (!flag) break;
        }
        return a;
    }

4、算法分析

4.1、時(shí)間復(fù)雜度

  • 最好情況:T(n)=O(n)
  • 最壞情況:T(n)=O(n^2)
  • 平均情況:T(n)=O(n^2)

4.2、是否穩(wěn)定

在冒泡排序中,只有交換才可以改變兩個(gè)元素的前后順序。為了保證冒泡排序算法的穩(wěn)定性,當(dāng)有相鄰的兩個(gè)元素大小相等的時(shí)候,我們不做交換,相同大小的數(shù)據(jù)在排序前后不會(huì)改變順序,所以冒泡排序是穩(wěn)定的排序算法。

到此這篇關(guān)于Java排序算法中的冒泡排序算法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java冒泡排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis plus時(shí)間判斷問題

    mybatis plus時(shí)間判斷問題

    在MyBatisPlus中,時(shí)間判斷可以通過XML轉(zhuǎn)義的方式實(shí)現(xiàn),例如使用>、<、<>、>=、<=進(jìn)行比較,這種方法涉及到SQL符號(hào)的轉(zhuǎn)義,確保查詢語(yǔ)句的安全性和準(zhǔn)確性,特別是在處理大于、小于和等于等邏輯時(shí),正確的轉(zhuǎn)義能夠防止SQL注入等安全問題
    2024-09-09
  • @DS注解的使用,動(dòng)態(tài)數(shù)據(jù)源,事務(wù)詳解

    @DS注解的使用,動(dòng)態(tài)數(shù)據(jù)源,事務(wù)詳解

    在項(xiàng)目中使用多數(shù)據(jù)源時(shí),可以借助苞米豆的dynamic-datasource-spring-boot-starter進(jìn)行配置,首先需引入相應(yīng)的jar包,并在application.yml中設(shè)置主從數(shù)據(jù)源,其中一般選擇master作為默認(rèn)數(shù)據(jù)源,在實(shí)現(xiàn)類中通過@DS注解指定數(shù)據(jù)源
    2024-09-09
  • Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績(jī)的劃分

    Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績(jī)的劃分

    這篇文章主要介紹了Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績(jī)的劃分,需要的朋友可以參考下
    2017-02-02
  • Spring Boot 配置加載全解析從 @ComponentScan 到自動(dòng)配置原理解析

    Spring Boot 配置加載全解析從 @ComponentScan 到自動(dòng)配

    本文給大家介紹了Spring Boot 配置加載全解析從@ComponentScan到自動(dòng)配置原理,通過實(shí)戰(zhàn)案例展示了如何基于@Conditional實(shí)現(xiàn)JDK版本條件裝配,并了詳細(xì)步驟和配置原理,感興趣的朋友一起看看吧
    2026-05-05
  • 簡(jiǎn)單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)

    簡(jiǎn)單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)

    這篇文章主要介紹了簡(jiǎn)單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu),設(shè)計(jì)模式是最基本直白簡(jiǎn)單的一種設(shè)計(jì)模式,需要的朋友可以參考下
    2016-04-04
  • SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼

    SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼

    電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實(shí)現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下
    2022-04-04
  • IDEA實(shí)現(xiàn)添加 前進(jìn)后退 到工具欄的操作

    IDEA實(shí)現(xiàn)添加 前進(jìn)后退 到工具欄的操作

    這篇文章主要介紹了IDEA 前進(jìn) 后退 添加到工具欄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Spring容器三級(jí)緩存的使用及說明

    Spring容器三級(jí)緩存的使用及說明

    這篇文章主要介紹了Spring容器三級(jí)緩存的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java利用ElasticSearch實(shí)現(xiàn)增刪改功能

    Java利用ElasticSearch實(shí)現(xiàn)增刪改功能

    這篇文章主要為大家詳細(xì)介紹了Java如何利用ElasticSearch實(shí)現(xiàn)增刪改功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Java讀取Map的兩種方法與對(duì)比

    Java讀取Map的兩種方法與對(duì)比

    相信大家都知道在Java中Map的使用非常頻繁,我們經(jīng)常會(huì)需要對(duì)Map進(jìn)行遍歷和讀取,那么下面這篇文章將展示兩種遍歷的方法以及簡(jiǎn)要分析。有需要的可以參考借鑒,下面來一起看看吧。
    2016-11-11

最新評(píng)論

大同县| 和林格尔县| 马关县| 鹤峰县| 元谋县| 苏尼特右旗| 邵阳县| 都江堰市| 石景山区| 黔南| 游戏| 邛崃市| 黄石市| 阿克| 苍梧县| 甘洛县| 高雄县| 筠连县| 惠安县| 凉山| 高平市| 营山县| 和平县| 龙里县| 临沭县| 开鲁县| 安溪县| 南华县| 如东县| 封开县| 迭部县| 房产| 梧州市| 新安县| 平利县| 肥城市| 界首市| 永修县| 襄垣县| 静乐县| 平凉市|