數組的冒泡排序

来源:https://www.cnblogs.com/qiaoqiaoli/archive/2019/04/21/10746359.html
-Advertisement-
Play Games

冒泡排序演算法的原理如下:1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個,否則不交換2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。做完這一步,最後的元素應該會是最大的數。3.針對所有的元素重覆以上的步驟,除了最後一個。4.持續每次對越來越少的元素重覆上面的步驟,直到沒有任何 ...


冒泡排序演算法的原理如下:
1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個,否則不交換
2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。做完這一步,最後的元素應該會是最大的數。
3.針對所有的元素重覆以上的步驟,除了最後一個。
4.持續每次對越來越少的元素重覆上面的步驟,直到沒有任何一對數字需要比較。

 例如:給定int[] arr={13,46,22,65,3},定義一個方法將數組冒泡排序,並列印    

分析過程 
第一輪比較: 裡面比較了四次                        i=0時;j=0,1,2,3,(即j=0;j<4;j++)
       {13,46,22,65,3}   13<46   不交換  arr[0]與arr[1]--->j=0:arr[j]與arr[j+1]比較
       {13,46,22,65,3}   46>22   交換    arr[1]與arr[2]--->j=1:arr[j]與arr[j+1]比較
       {13,22,46,65,3}   46<65   不交換  arr[2]與arr[3]--->j=2:arr[j]與arr[j+1]比較
       {13,22,46,65,3}   65>3    交換    arr[3]與arr[4]--->j=3:arr[j]與arr[j+1]比較
       最終排序{13,22,46,3,65}得出第一個最大數65

第二輪比較:裡面比較了三次                         i=1時;j=0,1,2,(即j=0;j<3;j++)     
       {13,22,46,3}    13<22  不交換   arr[0]與arr[1]--->j=0:arr[j]與arr[j+1]比較
       {13,22,46,3}    22<46  不交換   arr[1]與arr[2]--->j=1:arr[j]與arr[j+1]比較
       {13,22,46,3}    46>3   交換       arr[2]與arr[3]--->j=2:arr[j]與arr[j+1]比較
       最終排序{13,22,3,46}得出次大數46

第三輪比較:裡面比較了兩次                        i=2時;j=0,1,(即j=0;j<2;j++)
       {13,22,3}   13<22   不交換     arr[0]與arr[1]--->j=0:arr[j]與arr[j+1]比較
       {13,22,3}   22>3     交換        arr[1]與arr[2]--->j=1:arr[j]與arr[j+1]比較
       最終排序{13,3,22}得出第三個大的元素是22

第四輪比較:裡面比較了一次                       i=3時;j=0,(即j=0;j<1;j++)
       {13,3}   13>3    交換     arr[0]與arr[1]----->j=0:arr[j]與arr[j+1]比較
       最終排序{13,3,22}得出第四個大的元素是13

如果用i表示比較輪數,用j表示每輪裡面比較的次數,肯定要用到嵌套迴圈
arr.length=5
i=0時;j=0,1,2,3,(即j=0;j<4;j++)  0+4=arr.length-1
i=1時;j=0,1,2,  (即j=0;j<3;j++)  1+3=arr.length-1
i=2時;j=0,1,    (即j=0;j<2;j++)  2+2=arr.length-1       得出=arr.length-1-i
i=3時;j=0,      (即j=0;j<1;j++)  3+1=arr.length-1
可以看出外層i=0;i<arr.length-1;i++,而裡層j=0;j<;j++,?=4,3,2,1不斷遞減,可以看出外層i
在遞增時,裡層j<?而?在遞減,最終得出得出?=arr.length-1-i,最終結果是
i=0;i<arr.length-1;i++,    j=0;j<arr.length-1-i;j++,

代碼實現如下:
public class Demo4 {
    public static void main(String[] args){
    //1.定義一個數組
        int[] arr={13,46,22,65,3};

    //2.調用bubbleSort方法
        bubbleSort(arr);
     
    //3.列印排序完的數組,即數組遍歷
    for(int i=0; i<arr.length; i++){
           System.out.println(arr[i]);
                 }
    }


    //2.定義一個方法用冒泡排序將數組從小到大排序
    //參數:整個方法裡面唯一可變的量就是數組,對數組排序,數組是外部給的,可變的
    //返回值:最終結果是將整個數組重新排序,不需要求值,所以沒有返回值
    public static void bubbleSort(int[] arr){
        for(int i=0; i<arr.length; i++){//控制比較的輪數,即數組長度-1,所以i<arr.length
                  for(int j=0; j<arr.length-1-i; j++){//控制每輪裡面比較的次數
                      if(arr[j]>arr[j+1]){//如果第一個比第二個大,就交換他們兩個
                           int temp=arr[j];
                          arr[j]=arr[j+1];
                          arr[j+1]=temp; 

                     }  
                  }
           }
    }
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如果你發現所有的功能都報找不到映射的錯,有可能是因為mapper文件沒有被編譯 在eclipse中,把資源文件放在src下,是可以被編譯的 但是在idea中,直接把資源文件放在src下,如果不進行設置,是不會被編譯的,idea對src下的xml等資源文件是預設不編譯的 ​ 在pom.xml中加入以下 ...
  • 1. 游戲功能和流程圖 實現功能:翻開兩個一樣的牌子就顯示,全部翻開游戲結束,設置5種圖形,7種顏色,游戲開始提示隨機8個牌子 游戲流程圖 2. 游戲配置 配置游戲目錄 配置游戲(game_conf.py) 配置顏色(color.py) 配置形狀(shape.py) 3. 游戲使用工具函數(view ...
  • 1.當前路徑及路徑下的文件 os.getcwd():查看當前所在路徑。 os.listdir(path):列舉目錄下的所有文件。返回的是列表類型。 2.os.path.splitext(path) 分離文件名與擴展名;預設返回(fname,fextension)元組,可做分片操作 >>> os.pa ...
  • 如 "abcdt" 反轉之後是 "tdcba" 思路1: 運用遞歸的方法進行反轉 假設反轉方法為 reverseString(String str)1)當字元串為空或者只有一個字元時,返回原字元2)當字元串有兩個以上(長度為len)的字元時,反轉後的字元串為 第二個字元開始的子串的反轉結果+第一個字 ...
  • 內置函數是 Python 的一大特色,用極簡的語法實現很多常用的操作。 它們預先定義在內置命名空間中,開箱即用,所見即所得。Python 被公認是一種新手友好型的語言,這種說法能夠成立,內置函數在其中起到了極關鍵的作用。 舉個例子,求字元串 x 的長度,Python 的寫法是 len(x) ,而且這 ...
  • 一、流的概念 流:數據在數據源(文件)和程式(記憶體)之間經歷的路徑。 輸入流:數據從數據源(文件)到程式(記憶體)的路徑。 輸出流:數據從程式(記憶體)到數據源(文件)的路徑。 以記憶體為參照,如果數據向記憶體流動,則是輸入流,反之則是輸出流 位元組流:FileInputStream用來讀取文件 FileOu ...
  • 選擇排序:是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。 原理:首先用第一個元素和後面的每一個元素進行比較,如果後面有比第一個元素小的就交換這兩個元素 比較下來會得到第最小的一個元素,放在第一個位置,然後依次拿著後面每一個元素依次這樣比 ...
  • 概述 由於Go語言不允許隱式類型轉換,不同的類型之間的轉換必須做顯示的類型轉換。而類型轉換和類型斷言的本質,就是把一個類型轉換到另一個類型。 不過Go語言必須做顯示的類型轉換的要求也有例外的情況: 當普通 T 類型變數向 I 介面類型轉換時,是隱式轉換的(編譯時轉換);(T->I) 當 IX 介面變 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...