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

Java排序算法中的選擇排序算法實現(xiàn)

 更新時間:2023年12月12日 09:03:44   作者:warybee  
這篇文章主要介紹了Java排序算法中的選擇排序算法實現(xiàn),選擇排序算法的實現(xiàn)思路類似插入排序,分已排序區(qū)間和未排序區(qū)間,選擇排序每次會從未排序區(qū)間中找到最小(大)的元素,將其放到已排序區(qū)間的末尾,需要的朋友可以參考下

Java選擇排序算法

1、排序原理

選擇排序算法的實現(xiàn)思路類似插入排序,分已排序區(qū)間和未排序區(qū)間。選擇排序每次會從未排序區(qū)間中找到最小(大)的元素,將其放到已排序區(qū)間的末尾。

排序原理的基本思想是:

  • 第一次從 arr[0]~arr[n-1]中選取最小值,與 arr[0]交換;
  • 第二次從 arr[1]~arr[n-1]中選取最小值, 與 arr[1]交換;
  • 第三次從 arr[2]~arr[n-1]中選取最小值, 與 arr[2]交換, …,
  • 第 i 次從 arr[i-1]~arr[n-1]中選取最小值, 與 arr[i-1]交換, …,
  • 第 n-1 次從 arr[n-2]~arr[n-1]中選取最小值,與 arr[n-2]交換, 總共通過 n-1 次, 得到一個按排序碼從小到大排列的有序序列。

通過一張動態(tài)圖,來直觀感受一下,要排序的數(shù)組為:[4,5,6,1,3,2],正序排序

在這里插入圖片描述

偽代碼實現(xiàn):

循環(huán)(元素個數(shù)-1)次

把第一個沒有排序過的元素設置為最小值

循環(huán)(每個沒有排序過的元素)

如果元素 < 現(xiàn)在的最小值

將此元素設置成為新的最小值

將最小值和第一個沒有排序過的位置交換

2、代碼實現(xiàn)

/**
     * 選擇排序
     * @param array
     * @return
     */
    public static int[] selectionSort(int[] array) {
        if (array.length == 0)
            return array;
        for (int i = 0; i < array.length; i++) {
            //初始最小值默認為第一個數(shù)據(jù)
            int minIndex = i;
            for (int j = i+1; j < array.length; j++) {
                //找到最小的數(shù)
                if (array[j] < array[minIndex])
                    minIndex = j; //將最小數(shù)的索引保存
            }
            int temp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = temp;
        }
        return array;
    }

3、算法分析

3.1、時間復雜度

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

3.2、是否穩(wěn)定

選擇排序是一種不穩(wěn)定的排序算法。選擇排序每次都要找剩余未排序元素中的最小值,并和前面的元素交換位置,這樣破壞了穩(wěn)定性。

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

相關文章

  • mybatis 解決從列名到屬性名的自動映射失敗問題

    mybatis 解決從列名到屬性名的自動映射失敗問題

    這篇文章主要介紹了mybatis 解決從列名到屬性名的自動映射失敗問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • mybatis攔截器實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)權限隔離方式

    mybatis攔截器實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)權限隔離方式

    通過Mybatis攔截器,在執(zhí)行SQL前添加條件實現(xiàn)數(shù)據(jù)權限隔離,特別是對于存在用戶ID區(qū)分的表,攔截器會自動添加如user_id=#{userId}的條件,確保SQL在執(zhí)行時只能操作指定用戶的數(shù)據(jù),此方法主要應用于Mybatis的四個階段
    2024-11-11
  • JAVA8之函數(shù)式編程Function接口用法

    JAVA8之函數(shù)式編程Function接口用法

    這篇文章主要介紹了JAVA8之函數(shù)式編程Function接口用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java二進制操作(動力節(jié)點Java學院整理)

    Java二進制操作(動力節(jié)點Java學院整理)

    這篇文章給大家介紹了java二進制操作技巧,包括移位、位運算操作符等相關知識點,非常不錯,感興趣的朋友參考下吧
    2017-03-03
  • SpringBoot集成Elasticsearch過程實例

    SpringBoot集成Elasticsearch過程實例

    這篇文章主要介紹了SpringBoot集成Elasticsearch過程實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java中包的概念和用法實戰(zhàn)案例分析

    Java中包的概念和用法實戰(zhàn)案例分析

    這篇文章主要介紹了Java中包的概念和用法,結合具體案例形式分析了java包的概念、原理、使用方法及相關操作注意事項,需要的朋友可以參考下
    2019-09-09
  • 通過代碼實例深入解析Java重寫和重載

    通過代碼實例深入解析Java重寫和重載

    這篇文章主要介紹了通過代碼實例深入解析Java重寫和重載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 通過JDK源碼學習InputStream詳解

    通過JDK源碼學習InputStream詳解

    InputStream抽象類是所有字節(jié)輸入流的類的超類。這篇文章主要給大家介紹了關于通過JDK源碼學習InputStream的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • SpringMVC的組件之HandlerExceptionResolver詳解

    SpringMVC的組件之HandlerExceptionResolver詳解

    這篇文章主要介紹了SpringMVC的組件之HandlerExceptionResolver詳解,不管是在處理請求映射(HandlerMapping),還是在請求被處理(Handler)時拋出的異常,DispatcherServlet都會委托給HandlerExceptionResolver進行異常處理,該接口只有一個方法,需要的朋友可以參考下
    2023-10-10
  • Java的線程阻塞、中斷及優(yōu)雅退出方法詳解

    Java的線程阻塞、中斷及優(yōu)雅退出方法詳解

    這篇文章主要介紹了Java的線程阻塞、中斷及優(yōu)雅退出方法詳解,Java中的線程阻塞是指當一個線程無法繼續(xù)執(zhí)行時,它會進入阻塞狀態(tài),直到某個條件滿足后才能繼續(xù)執(zhí)行,線程阻塞可以通過多種方式實現(xiàn),需要的朋友可以參考下
    2023-10-10

最新評論