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

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

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

Java插入排序算法

1、排序原理

插入排序是將數(shù)組中的數(shù)據(jù)分為兩個(gè)區(qū)間,已排序區(qū)間和未排序區(qū)間,其中已排序區(qū)間初始只有一個(gè)元素,就是數(shù)組的第一個(gè)元素。插入算法的核心思想是取未排序區(qū)間中的元素,在已排序區(qū)間中找到合適的插入位置將其插入,并保證已排序區(qū)間數(shù)據(jù)一直有序。重復(fù)這個(gè)過程,直到未排序區(qū)間中元素為空,算法結(jié)束。通過一張動(dòng)態(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ù)移動(dòng),結(jié)束此次遍歷。此時(shí)排序區(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ù)移動(dòng),結(jié)束此次遍歷。此時(shí)排序區(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ù)移動(dòng),結(jié)果:[4,5,1,6,3,2]

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

1和4比較,1小于4,進(jìn)行數(shù)據(jù)移動(dòng),結(jié)果:[1,4,5,6,3,2] ,此時(shí)1在已排序區(qū)間中找到合適的插入位置,此時(shí)排序區(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],此時(shí)排序區(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],此時(shí)排序區(qū)間 a=[1,2,3,4,5,6] ,未排序區(qū)間為空b=[ ],排序結(jié)束

2、代碼實(shí)現(xiàn)

明白了上面的原理,代碼實(shí)現(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、時(shí)間復(fù)雜度

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

3.2、是否穩(wěn)定

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

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

相關(guān)文章

  • java -D參數(shù)設(shè)置系統(tǒng)屬性無效問題及解決

    java -D參數(shù)設(shè)置系統(tǒng)屬性無效問題及解決

    這篇文章主要介紹了java -D參數(shù)設(shè)置系統(tǒng)屬性無效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring 注解編程模型相關(guān)知識(shí)詳解

    Spring 注解編程模型相關(guān)知識(shí)詳解

    這篇文章主要介紹了Spring 注解編程模型相關(guān)知識(shí)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java運(yùn)行時(shí)環(huán)境之ClassLoader類加載機(jī)制詳解

    Java運(yùn)行時(shí)環(huán)境之ClassLoader類加載機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于Java運(yùn)行時(shí)環(huán)境之ClassLoader類加載機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Mybatis實(shí)體類和表映射問題(推薦)

    Mybatis實(shí)體類和表映射問題(推薦)

    在項(xiàng)目開發(fā)中我們經(jīng)常會(huì)遇到表中的字段名和表對(duì)應(yīng)實(shí)體類的屬性名稱不一定都是完全相同的。下面小編給大家介紹下這種情況下如何解決字段名與實(shí)體類屬性名不相同的沖突問題。下面小編給大家?guī)砹薓ybatis實(shí)體類和表映射的解決方法,小伙伴們一起學(xué)習(xí)吧
    2016-09-09
  • 關(guān)于SpringBoot中controller參數(shù)校驗(yàn)的使用

    關(guān)于SpringBoot中controller參數(shù)校驗(yàn)的使用

    本文主要介紹了關(guān)于SpringBoot中controller參數(shù)校驗(yàn)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • springboot默認(rèn)日志框架選擇源碼解析(推薦)

    springboot默認(rèn)日志框架選擇源碼解析(推薦)

    這篇文章主要介紹了springboot默認(rèn)日志框架選擇源碼解析(推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java程序單實(shí)例運(yùn)行的簡(jiǎn)單實(shí)現(xiàn)

    Java程序單實(shí)例運(yùn)行的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了Java程序單實(shí)例運(yùn)行的簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot配置Jackson返回統(tǒng)一默認(rèn)值的實(shí)現(xiàn)示例

    springboot配置Jackson返回統(tǒng)一默認(rèn)值的實(shí)現(xiàn)示例

    在項(xiàng)目開發(fā)中,我們返回的數(shù)據(jù)或者對(duì)象沒有的時(shí)候一般直接返回的null,那么如何返回統(tǒng)一默認(rèn)值,感興趣的可以了解一下
    2021-07-07
  • spring結(jié)合redis如何實(shí)現(xiàn)數(shù)據(jù)的緩存

    spring結(jié)合redis如何實(shí)現(xiàn)數(shù)據(jù)的緩存

    這篇文章主要介紹了spring結(jié)合redis如何實(shí)現(xiàn)數(shù)據(jù)的緩存,實(shí)現(xiàn)的目的目的不是加快查詢的速度,而是減少數(shù)據(jù)庫(kù)的負(fù)擔(dān),需要的朋友可以參考下
    2015-12-12
  • 9個(gè)java數(shù)組常用操作實(shí)例

    9個(gè)java數(shù)組常用操作實(shí)例

    在本篇文章里小編給各位整理了關(guān)于java數(shù)組常用操作的實(shí)例以及相關(guān)的代碼,需要的朋友們跟著學(xué)習(xí)下。
    2019-07-07

最新評(píng)論