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

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

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

Java選擇排序算法

1、排序原理

選擇排序算法的實(shí)現(xiàn)思路類(lèi)似插入排序,分已排序區(qū)間和未排序區(qū)間。選擇排序每次會(huì)從未排序區(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]交換, 總共通過(guò) n-1 次, 得到一個(gè)按排序碼從小到大排列的有序序列。

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

在這里插入圖片描述

偽代碼實(shí)現(xiàn):

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

把第一個(gè)沒(méi)有排序過(guò)的元素設(shè)置為最小值

循環(huán)(每個(gè)沒(méi)有排序過(guò)的元素)

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

將此元素設(shè)置成為新的最小值

將最小值和第一個(gè)沒(méi)有排序過(guò)的位置交換

2、代碼實(shí)現(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++) {
            //初始最小值默認(rèn)為第一個(gè)數(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、時(shí)間復(fù)雜度

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

3.2、是否穩(wěn)定

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

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

相關(guān)文章

  • mybatis 解決從列名到屬性名的自動(dòng)映射失敗問(wèn)題

    mybatis 解決從列名到屬性名的自動(dòng)映射失敗問(wèn)題

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

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

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

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

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

    Java二進(jìn)制操作(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    這篇文章給大家介紹了java二進(jìn)制操作技巧,包括移位、位運(yùn)算操作符等相關(guān)知識(shí)點(diǎn),非常不錯(cuò),感興趣的朋友參考下吧
    2017-03-03
  • SpringBoot集成Elasticsearch過(guò)程實(shí)例

    SpringBoot集成Elasticsearch過(guò)程實(shí)例

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

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

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

    通過(guò)代碼實(shí)例深入解析Java重寫(xiě)和重載

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

    通過(guò)JDK源碼學(xué)習(xí)InputStream詳解

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

    SpringMVC的組件之HandlerExceptionResolver詳解

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

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

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

最新評(píng)論