欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Java冒泡排序算法

1、冒泡排序原理

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

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

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

如果我們要對一組數(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)識符,來判斷當(dāng)前是否還有數(shù)據(jù)交換

經(jīng)過優(yōu)化,對 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)識當(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ù)在排序前后不會改變順序,所以冒泡排序是穩(wěn)定的排序算法。

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

相關(guān)文章

  • java synchronized同步靜態(tài)方法和同步非靜態(tài)方法的異同

    java synchronized同步靜態(tài)方法和同步非靜態(tài)方法的異同

    這篇文章主要介紹了java synchronized同步靜態(tài)方法和同步非靜態(tài)方法的異同的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗(yàn)注解

    Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗(yàn)注解

    這篇文章主要介紹了Spring的@Validation和javax包下的@Valid區(qū)別以及自定義校驗(yàn)注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot如何加載多個(gè)YAML配置文件

    SpringBoot如何加載多個(gè)YAML配置文件

    在Spring?Boot中加載多個(gè)?YAML?配置文件是一個(gè)常見的需求,通常用于將配置信息分離到多個(gè)文件中以便于管理和維護(hù),下面就跟隨小編一起來看看具體實(shí)現(xiàn)吧
    2025-02-02
  • 詳解SpringBoot中的tomcat優(yōu)化和修改

    詳解SpringBoot中的tomcat優(yōu)化和修改

    這篇文章主要介紹了詳解SpringBoot中的tomcat優(yōu)化和修改,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Intellij IDEA導(dǎo)入eclipse web項(xiàng)目的操作步驟詳解

    Intellij IDEA導(dǎo)入eclipse web項(xiàng)目的操作步驟詳解

    Eclipse當(dāng)中的web項(xiàng)目都會有這兩個(gè)文件,但是idea當(dāng)中應(yīng)該是沒有的,所以導(dǎo)入會出現(xiàn)兼容問題,但是本篇文章會教大家如何導(dǎo)入,并且導(dǎo)入過后還能使用tomcat運(yùn)行,需要的朋友可以參考下
    2023-08-08
  • Java中Range函數(shù)的簡單介紹

    Java中Range函數(shù)的簡單介紹

    這篇文章主要介紹了Java中Range函數(shù)的簡單介紹,Java中的range方法用于返回IntStream和LongStream在函數(shù)參數(shù)范圍內(nèi)的順序值
    2022-07-07
  • 基于JavaSwing+mysql開發(fā)一個(gè)學(xué)生社團(tuán)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于JavaSwing+mysql開發(fā)一個(gè)學(xué)生社團(tuán)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    項(xiàng)目使用Java swing+mysql開發(fā),可實(shí)現(xiàn)基礎(chǔ)數(shù)據(jù)維護(hù)、用戶登錄注冊、社團(tuán)信息列表查看、社團(tuán)信息添加、社團(tuán)信息修改、社團(tuán)信息刪除以及退出注銷等功能、界面設(shè)計(jì)比較簡單易學(xué)、適合作為Java課設(shè)設(shè)計(jì)以及學(xué)習(xí)技術(shù)使用,需要的朋友參考下吧
    2021-08-08
  • Java反轉(zhuǎn)鏈表測試過程介紹

    Java反轉(zhuǎn)鏈表測試過程介紹

    這篇文章主要介紹了Java反轉(zhuǎn)鏈表測試過程,學(xué)習(xí)過數(shù)據(jù)結(jié)構(gòu)的小伙伴們,對鏈表想來是并不陌生。本篇文章將為大家介紹幾種在Java語言當(dāng)中,實(shí)現(xiàn)鏈表反轉(zhuǎn)的幾種方法,以下是具體內(nèi)容
    2023-04-04
  • 詳解Java sort()數(shù)組排序(升序和降序)

    詳解Java sort()數(shù)組排序(升序和降序)

    這篇文章主要介紹了詳解Java sort()數(shù)組排序(升序和降序),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java concurrency之AtomicReference原子類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之AtomicReference原子類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    AtomicReference是作用是對"對象"進(jìn)行原子操作。這篇文章主要介紹了Java concurrency之AtomicReference原子類,需要的朋友可以參考下
    2017-06-06

最新評論