數組的選擇排序

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

選擇排序:是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。 原理:首先用第一個元素和後面的每一個元素進行比較,如果後面有比第一個元素小的就交換這兩個元素 比較下來會得到第最小的一個元素,放在第一個位置,然後依次拿著後面每一個元素依次這樣比 ...


選擇排序:是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。

原理:首先用第一個元素和後面的每一個元素進行比較,如果後面有比第一個元素小的就交換這兩個元素
          比較下來會得到第最小的一個元素,放在第一個位置,然後依次拿著後面每一個元素依次這樣比較,
          每次都會得到一個最小的元素,排序完就是從小到大排序


例如:int[] arr={31,23,79,65,16}   arr.length=5,將這個數組arr安照選擇排序演算法來重新排序

思路分析:
第一輪比較:                                                    i=0時,j=1,2,3,4 (即j=1;j<5;j++)
   {31,23,79,65,16}  31>23  交換   arr[0]與arr[1]比較--->j=1:arr[0] 比 arr[1]=arr[j]   
   {23,31,79,65,16}  23<79  不交換 arr[0]與arr[2]比較--->j=2:arr[0] 比 arr[2]=arr[j]
   {23,31,79,65,16}  23<65  不交換 arr[0]與arr[3]比較--->j=3:arr[0] 比 arr[3]=arr[j]
   {23,31,79,65,16}  23>16  交換   arr[0]與arr[4]比較--->j=4:arr[0] 比 arr[4]=arr[j]
最終排序{16,31,79,65,23}得出一個最小元素arr[0]=16放在首位          i=0,arr[0]=arr[i]

第二輪比較:                                                   i=1時,j=2,3,4 (即j=2;j<5;j++)
   {31,79,65,23}   31<79  不交換  arr[1]與arr[2]比較--->j=2:arr[1] 比 arr[2]
   {31,79,65,23}   31<65  不交換  arr[1]與arr[3]比較--->j=3:arr[1] 比 arr[3]
   {31,79,65,23}   31>23  交換    arr[1]與arr[4]比較--->j=4:arr[1] 比 arr[4]
   最終排序{23,79,65,31}  得出一個最小元素arr[1]=23     此時還是arr[i]與arr[j]相比

第三輪比較:                                            i=2時,j=3,4 (即j=3;j<5;j++)
   {79,65,31}   79>65  交換  arr[2]與arr[3]比較--->j=3:arr[2] 比 arr[3]
   {65,79,31}   65>31  交換  arr[2]與arr[4]比較--->j=4:arr[2] 比 arr[4]
   最終排序{31,79,65}  得出一個最小元素arr[2]=31     此時還是arr[i]與arr[j]相比

第四輪比較:                                         i=3時,j=4 (即j=4;j<5;j++)
   {79,65}   79>65   交換   arr[3]與arr[4]比較--->j=4:arr[2] 比 arr[4]
   最終得出小的元素是arr[3]=65

i=0時,j=1,2,3,4 (即j=1;j<5;j++)                         i=0,?=1
i=1時,j=2,3,4    (即j=2;j<5;j++)-->j=?;j<5;j++    i=1,?=2 ======》?=i+1
i=2時,j=3,4       (即j=3;j<5;j++)                         i=2,?=3
i=3時,j=4          (即j=4;j<5;j++)                         i=3,?=4
  從上面可以看出還是四輪迴圈,每輪裡面又進行迴圈,外層是i=0;i<arr.length-1;i++
  而內層是j=i+1;j<arr.length;j++

代碼實現如下:
public class ArrayDemo{
   public static void main(String[] args){
           //1.定義一個數組
           int[] arr={31,23,79,65,16};

          //2.調用selectSort方法
          selectSort(arr);

         //3.將排序完的數組列印出來,即遍歷
           for(int i=0; i<arr.length; i++){
              System.out.println(arr[i]);

             }
      }
    
    //將上述第二步拿下來定義成一個方法
    //參數:方法裡面不斷改變的值,即數組,隨便給一個數組都可以用這個方法排序
    //返回值:最後結果是排序數組,沒有計算值,不需要返回值
      public static void selectSort(int[] arr){
            //2.用選擇排序對數組進行排序
            for(int i=0; i<arr.length-1; i++){ //控制外層迴圈
                     for(int j=i+1; j<arr.length; j++){ //控制裡層迴圈
                            if(arr[i]>arr[j]){     //迴圈裡面將arr[i]與arr[j]相比,滿足條件就交換
                                   int temp=arr[i];
                                   arr[i]=arr[j];
                                   arr[j]=temp; 

                             }   

                      }
              }
       }
}


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

-Advertisement-
Play Games
更多相關文章
  • @[toc] 實戰內容 海倫女士一直使用線上約會網站尋找適合自己的約會對象。儘管約會網站會推薦不同的人選,但她並不是喜歡每一個人。經過一番總結,她發現自己交往過的人可以進行如下分類: 不喜歡的人 魅力一般的人 極具魅力的人 海倫收集約會數據已經有了一段時間,她把這些數據存放在文本文件datingTe ...
  • ArrayBlockingQueue的實現方式? ArrayBlockingQueue是否需要擴容? ArrayBlockingQueue有什麼缺點? ...
  • 如果你發現所有的功能都報找不到映射的錯,有可能是因為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 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...