最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java排序算法中的插入排序算法實現(xiàn)

 更新時間:2023年12月12日 09:13:32   作者:warybee  
這篇文章主要介紹了Java排序算法中的插入排序算法實現(xiàn),插入排序是將數(shù)組中的數(shù)據(jù)分為兩個區(qū)間,已排序區(qū)間和未排序區(qū)間,其中已排序區(qū)間初始只有一個元素,就是數(shù)組的第一個元素,需要的朋友可以參考下

Java插入排序算法

1、排序原理

插入排序是將數(shù)組中的數(shù)據(jù)分為兩個區(qū)間,已排序區(qū)間和未排序區(qū)間,其中已排序區(qū)間初始只有一個元素,就是數(shù)組的第一個元素。插入算法的核心思想是取未排序區(qū)間中的元素,在已排序區(qū)間中找到合適的插入位置將其插入,并保證已排序區(qū)間數(shù)據(jù)一直有序。重復(fù)這個過程,直到未排序區(qū)間中元素為空,算法結(jié)束。通過一張動態(tài)圖,來直觀感受一下,要排序的數(shù)組為:[4,5,6,1,3,2],正序排序

在這里插入圖片描述

1.1、排序過程詳解

要排序的數(shù)組為:[4,5,6,1,3,2] ,假設(shè) a為已排序區(qū)間,b為未排序區(qū)間,初始a=[4] ,b=[5 ,6, 1, 3, 2]

第一次遍歷未排序區(qū)間:

未排序區(qū)間中的 5 依次與已排序區(qū)間中的數(shù)據(jù)[4]比較

5和4比較,5大于4,不進(jìn)行數(shù)據(jù)移動,結(jié)束此次遍歷。此時排序區(qū)間 a=[4,5] 未排序區(qū)間b=[ 6, 1, 3, 2],結(jié)果:[4,5,6,1,3,2]

第二次遍歷未排序區(qū)間:

未排序區(qū)間中的 6 依次與已排序區(qū)間中的數(shù)據(jù)[4,5]比較

6和5比較,6大于5,不進(jìn)行數(shù)據(jù)移動,結(jié)束此次遍歷。此時排序區(qū)間 a=[4,5,6] ,未排序區(qū)間b=[ 1, 3, 2],結(jié)果:[4,5,6,1,3,2]

第三次遍歷未排序區(qū)間:

未排序區(qū)間中的 1 依次與已排序區(qū)間中的數(shù)據(jù)[4,5,6]比較

1和6比較,1小于6,進(jìn)行數(shù)據(jù)移動,結(jié)果:[4,5,1,6,3,2]

1和5比較,1小于5,進(jìn)行數(shù)據(jù)移動,結(jié)果:[4,1,5,6,3,2]

1和4比較,1小于4,進(jìn)行數(shù)據(jù)移動,結(jié)果:[1,4,5,6,3,2] ,此時1在已排序區(qū)間中找到合適的插入位置,此時排序區(qū)間 a=[1,4,5,6] ,未排序區(qū)間b=[3, 2]

第四次遍歷未排序區(qū)間:

未排序區(qū)間中的 3 依次與已排序區(qū)間中的數(shù)據(jù)[1,4,5,6]比較

排序后結(jié)果:[1,3,4,5,6,2],此時排序區(qū)間 a=[1,3,4,5,6] ,未排序區(qū)間b=[ 2]

第五次遍歷未排序區(qū)間:

未排序區(qū)間中的 2 依次與已排序區(qū)間中的數(shù)據(jù)[1,3,4,5,6]比較

排序后結(jié)果:[1,2,3,4,5,6],此時排序區(qū)間 a=[1,2,3,4,5,6] ,未排序區(qū)間為空b=[ ],排序結(jié)束

2、代碼實現(xiàn)

明白了上面的原理,代碼實現(xiàn)起來就容易多了

/**     * 插入排序     * @param arr     * @return     */    public static int[] insertionSort(int[] arr) {        for (int i = 1; i < arr.length; i++) {            //待排序元素            int value=arr[i];            //已排序元素下標(biāo)            int insertIndex=i-1;            //使用待排序元素依次與已排序區(qū)的元素相比較            while (insertIndex>=0&&value<arr[insertIndex]){                arr[insertIndex+1]=arr[insertIndex];                insertIndex--;            }            //把當(dāng)前未排序數(shù)據(jù)插入到已排序區(qū)間            arr[insertIndex+1]=value;        }        return arr;    }

3、算法分析

3.1、時間復(fù)雜度

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

3.2、是否穩(wěn)定

在插入排序中,對于值相同的元素,我們可以選擇將后面出現(xiàn)的元素,插入到前面出現(xiàn)元素的后面,這樣就可以保持原有的前后順序不變,所以插入排序是穩(wěn)定的排序算法。

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

相關(guān)文章

  • spring?@Conditional的使用與擴(kuò)展源碼分析

    spring?@Conditional的使用與擴(kuò)展源碼分析

    這篇文章主要介紹了spring?@Conditional的使用與擴(kuò)展,這里需要注意如果Condition返回的是false,那么spirng就不會對方法或類進(jìn)行解析,具體源碼分析跟隨小編一起看看吧
    2022-03-03
  • Java包機(jī)制及javadoc詳解

    Java包機(jī)制及javadoc詳解

    為了更好地組織類,Java提供了包機(jī)制,用于區(qū)別類名的命名空間,一般利用公司域名倒置作為包名,這篇文章主要介紹了Java包機(jī)制以及javadoc,需要的朋友可以參考下
    2022-10-10
  • java實現(xiàn)  微博登錄、微信登錄、qq登錄實現(xiàn)代碼

    java實現(xiàn) 微博登錄、微信登錄、qq登錄實現(xiàn)代碼

    這篇文章主要介紹了java實現(xiàn) 微博登錄、微信登錄、qq登錄實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Spring?JDBC配置與使用的實現(xiàn)

    Spring?JDBC配置與使用的實現(xiàn)

    本文主要介紹了Spring?JDBC配置與使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • Servlet+JavaBean+JSP打造Java Web注冊與登錄功能

    Servlet+JavaBean+JSP打造Java Web注冊與登錄功能

    比作MVC的話,控制器部分采用Servlet來實現(xiàn),模型部分采用JavaBean來實現(xiàn),而大部分的視圖采用Jsp頁面來實現(xiàn),接下來我們就來詳細(xì)看看如何用Servlet+JavaBean+JSP打造Java Web注冊與登錄功能
    2016-05-05
  • Spring注解之@validated使用詳解

    Spring注解之@validated使用詳解

    spring-boot中可以用@validated來校驗數(shù)據(jù),如果數(shù)據(jù)異常則會統(tǒng)一拋出異常,方便異常中心統(tǒng)一處理,這篇文章主要介紹了Spring注解之@validated使用,需要的朋友可以參考下
    2023-01-01
  • springboot控制層圖片驗證碼生成

    springboot控制層圖片驗證碼生成

    這篇文章主要為大家詳細(xì)介紹了springboot控制層圖片驗證碼生成,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • eclipse中自動生成javadoc文檔的方法

    eclipse中自動生成javadoc文檔的方法

    這篇文章主要介紹了eclipse中自動生成javadoc文檔的方法,是實用eclipse開發(fā)Java程序時非常實用的技巧,對于進(jìn)行Java項目開發(fā)具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • Spring Boot如何動態(tài)創(chuàng)建Bean示例代碼

    Spring Boot如何動態(tài)創(chuàng)建Bean示例代碼

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何動態(tài)創(chuàng)建Bean的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程

    SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程

    這篇文章給大家介紹了SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01

最新評論

莱阳市| 朝阳市| 莱州市| 太谷县| 余干县| 平顺县| 通河县| 富民县| 潼关县| 曲阜市| 墨脱县| 芦山县| 虎林市| 墨脱县| 本溪市| 上思县| 寻甸| 比如县| 和硕县| 托克逊县| 青海省| 贵州省| 康保县| 上虞市| 旬阳县| 衡山县| 玛多县| 金堂县| 平顺县| 怀仁县| 临桂县| 五指山市| 五莲县| 漾濞| 礼泉县| 钟祥市| 绍兴县| 车险| 江津市| 金湖县| 文化|