Java數組的排序演算法

来源:http://www.cnblogs.com/BlueStarWei/archive/2017/05/16/6853050.html
-Advertisement-
Play Games

數組排序演算法:冒泡排序法、選擇排序法、直接插入排序法、快速排序法 ...


  在Java中,實現數組的排序演算法有很多,如冒泡排序法、選擇排序法、直接插入法和快速排序法等。下麵介紹幾種排序演算法的具體 實現。

  本文引用文獻:Java必須知道的300個問題。

1.冒泡排序法

  1.1 基本思想:

    比較待排序的數據元素中的相鄰元素:如果前面的元素大於後面的元素,那麼將兩個元素交換位置;否則不變。即:永遠保持大的元素值在待排序元素中的最後面位置。這樣,數組元素就像氣泡一樣從底部上升到頂部。

  1.2 過程實例:

    每一輪,排序數組的長度減1次(每一輪結束後,最大元素都是最後一個元素。因此下輪比較過程中最後一次比較不用進行。)

  1.3 代碼實現

public static void main(String[] args) {
    //初始化數組
    int[] array = {63,4,24,1,3,13};
    //排序
    for (int i = 1; i < array.length; i++) {
        for (int j = 0; j < array.length - i; j++) {
            if(array[j] > array[j+1]){
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;  
            }
        }
    }
    //輸出結果
    System.out.println(Arrays.toString(array));
}

 

2. 選擇排序法

  2.1 基本思想

    每一輪從待排序的數據元素中選出最小(最大)的一個元素,將該元素與待排序的數據元素的最前面(最後面)的元素進行交換,直到全部待排序的數據元素排完。  

  2.2 過程實例  

 

   2.3 代碼實現

//初始化數組
int[] array = {63,4,24,1,3,13};

//排序
int len = array.length;
//控制輪數
for (int i = 1; i < len; i++) {
    int max = array[0];
    int index = 0;
    //查找最大值
    for (int j = 1; j < len - (i - 1); j++) {
        if(max < array[j]){
            max = array[j]; 
            index = j;
        }
    }
    //互換位置
    int temp = array[index];
    array[index] = array[len - i];
    array[len - i] = temp;
}

//輸出
System.out.println(Arrays.toString(array));

 

3. 直接插入排序法

  3.1 基本思想

    1. 將n個有序元素放在數組中 --> 2.確認要插入元素的位置 --> 3.將數組中的要插入元素的位置後面的元素向後移一個位置  --> 4.將要出如的元素插到合適的位置上 --> 5.重覆2. 3. 4.直到所有元素均插入到數組中。

  3.2 實例過程

    

 

  3.3 代碼實現

    

//初始化數組
int[] array = {20,40,90,30,80,70,50};

//排序
int j;
for (int i = 1; i < array.length; i++) {
    int temp = array[i];
    for (j = i - 1; j > 0 && array[j] > temp; j--) {
        array[j+1] = array[j];
    }
    array[j+1] = temp;
}

//輸出
System.out.println(Arrays.toString(array));

 

4. 快速排序法

   4.1 基本思想

    通過一趟排序將要排序的數據分割成獨立的兩部分(通常選取中數作為分割線),其中一部分的所有數據都比另一部分的所有數據要小,然後再按此方法對這兩部分數據進行快速排序,整個過程可以通過遞歸進行。

  4.2 實例過程

 

  4.3 代碼實現

public static void main(String[] args) {
    //初始化數組
    int[] array = {49,38,65,97,76,13,27,49};
        
    //排序
    quickSort(array, 0, array.length - 1);
        
    //輸出
    System.out.println(Arrays.toString(array));
        
}

private static void quickSort(int[] array, int lowIndex, int highIndex) {
    int lo = lowIndex;
    int hi = highIndex;
    int mid;
    if(highIndex > lowIndex){
        mid = array[(lowIndex + highIndex) / 2];
        while(lo <= hi){
            while((lo < highIndex) && (array[lo] < mid)){
                ++lo;
            }
            while(hi > lowIndex && array[hi] >mid){
                --hi;
            }
            if(lo <= hi){
                swap(array,lo,hi);
                ++lo;
                --hi;
            }
        }
        if(lowIndex <hi){
            quickSort(array, lowIndex, hi);
        }
        if(lo < highIndex){
            quickSort(array, lo, highIndex);
        }
    }
}

private static void swap(int[] array, int lo, int hi) {
    int temp = array[lo];
    array[lo] = array[hi];
    array[hi] = temp;
}

 

  本博文路徑:http://www.cnblogs.com/BlueStarWei/p/6853050.html                      


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

-Advertisement-
Play Games
更多相關文章
  • 主要介紹ASP.NETMVC 應用提速的六種方法,因為沒有人喜歡等待,所以介紹幾種常用的優化方法。 大家可能會遇到排隊等待,遇到紅燈要等待,開個網頁要等待,等等等。 理所當然,沒有人喜歡等待網頁慢吞吞地載入,尤其是在移動端訪問網站時。其實,Web 開發者敏感的神經決定了我們等待與否。 現在,快速響應 ...
  • ...
  • 本文原創,轉載請註明出處:http://www.cnblogs.com/AdvancePikachu/p/6856374.html 首先,總結了下最近工作中關於攝像機漫游的功能, 腳本如下: 1 Transform _Camera; 2 public LayerMask mask; 3 4 publ ...
  • 之前為了便於人事部門招聘登錄網站更簡潔高效,免去每天頻繁輸網址、用戶名、密碼等相關登錄信息,特基於winform+HttpWebRequest實現模擬請求登錄,最終達到一鍵登錄到招聘網站後臺的效果。 要實現一鍵登錄到各大人才招聘網站就必需先瞭解網站的登錄步驟即原理,然後通過代碼一步步模擬實現即可。 ...
  • 首先點擊代碼模板右鍵新建一個模板 把這串代碼粘貼保存。 使用方法: 1.先點擊我們剛纔新建的模板 2.點擊生成代碼按鈕 生成的代碼是這樣子的 ...
  • 第一種:使用 Microsoft.Office.Interop.Excel.dll 首先需要安裝 office 的 excel,然後再找到 Microsoft.Office.Interop.Excel.dll 組件,添加到引用。 public void ExportExcel(DataTable d ...
  • Java通過Executors提供四種線程池,分別為:newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。newFixedThreadPool 創建一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。newS ...
  • 一、Map用法 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...