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

圖解Java經(jīng)典算法插入排序的原理與實(shí)現(xiàn)

 更新時(shí)間:2022年09月10日 09:45:23   作者:Binaire-沐辰  
插入排序的算法描述是一種簡單直觀的排序算法。其原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將用Java語言實(shí)現(xiàn)插入排序算法并進(jìn)行可視化,感興趣的可以了解一下

一、算法介紹

插入排序,也稱為直接插入排序。插入排序是簡單排序中效率最好的一種,它也是學(xué)習(xí)其他高級(jí)排序的基礎(chǔ),比如希爾排序/快速排序,所以非常重要,而它相對于選擇排序的優(yōu)點(diǎn)就在于比較次數(shù)幾乎是少了一半。

二、算法思想

每次將待排序的元素插入到已排序的序列中,直至全部插入完成。

三、算法原理

  • 把所有元素分為兩個(gè)序列,將第一待排序序列第一個(gè)元素看做一個(gè)有序序列,把第二個(gè)元素到最后一個(gè)元素當(dāng)成是未排序序列。
  • 從未排序序列中的第一個(gè)元素開始,向已排序的序列中插入
  • 倒序遍歷已排序序列,依次和待插入的元素比較,找到一個(gè)小于或等于待插入的元素,插入到該元素后面,其余元素向后移動(dòng)一位

四、動(dòng)圖演示

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

核心代碼

public class InsertionSort {
    //  插入排序
    public static void sort(Comparable[] a){
       for (int i = 1;i < a.length;i++){
           for (int j = i;j > 0;j--){
               //比較索引j處的值與索引j-1處的值,如果j-1索引處的值大,則交換數(shù)據(jù),反之,則找到了合適的位置,退出循環(huán)
               if (greater(a[j - 1],a[j])){
                   swap(a,j - 1,j);
               }else{
                   break;
               }
           }
       }
    }
    //比較 v 是否大于 w
    public static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w) > 0;
    }
    //數(shù)組元素交換位置
    private static void swap(Comparable[] a,int i,int j){
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

方法調(diào)用

public class InsertionSortTest {
    public static void main(String[] args) {
        Integer[] arr = {3,44,38,5,47,15,36,26,27};
        InsertionSort.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
//排序前:{3,44,38,5,47,15,36,26,27}
//排序后:{3,5,15,26,27,36,38,44,47}

六、算法分析

6.1 時(shí)間復(fù)雜度

當(dāng)待排序的 n 個(gè)元素是正序排列時(shí),是排序的最佳情況,只需要比較(n-1)次,時(shí)間復(fù)雜度是O(n);最壞的情況是該序列是反序排列,此時(shí)就需要比較n(n-1)/2次,時(shí)間復(fù)雜度為 O(n²)。

插入排序的平均時(shí)間復(fù)雜度為 O(n²)

6.2 空間復(fù)雜度

插入排序的空間復(fù)雜度為常數(shù)階O(1)

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

相關(guān)文章

  • Java動(dòng)態(tài)代理靜態(tài)代理實(shí)例分析

    Java動(dòng)態(tài)代理靜態(tài)代理實(shí)例分析

    這篇文章主要介紹了Java動(dòng)態(tài)代理靜態(tài)代理實(shí)例分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java實(shí)現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式

    Java實(shí)現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)文件復(fù)制及文件夾復(fù)制幾種常用的方式,java復(fù)制文件的方式其實(shí)有不少種,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • openjdk與Oraclejdk的區(qū)別

    openjdk與Oraclejdk的區(qū)別

    這篇文章主要介紹了openjdk與Oraclejdk的區(qū)別,幫助大家更好的了解JAVA,感興趣的朋友可以了解下
    2020-08-08
  • MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

    MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

    這篇文章主要介紹了MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java判斷閏年的2種方法示例

    Java判斷閏年的2種方法示例

    這篇文章主要給大家介紹了關(guān)于Java判斷閏年的2種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java學(xué)習(xí)之junit單元測試案例(經(jīng)典版)

    java學(xué)習(xí)之junit單元測試案例(經(jīng)典版)

    這篇文章主要介紹了java學(xué)習(xí)之junit單元測試的相關(guān)資料,文中講解了JUnit單元測試的基本概念、作用、使用assert進(jìn)行驗(yàn)證、覆蓋率分析、BeforeEach和AfterAll的使用、通過反射和注解實(shí)現(xiàn)測試,需要的朋友可以參考下
    2024-12-12
  • Java實(shí)現(xiàn)的文件過濾代碼分享(按后輟過濾)

    Java實(shí)現(xiàn)的文件過濾代碼分享(按后輟過濾)

    這篇文章主要介紹了Java實(shí)現(xiàn)的文件過濾代碼分享,本文通過后輟名過濾,代碼寫簡潔,容易看懂,需要的朋友可以參考下
    2014-07-07
  • springboot使用Logback把日志輸出到控制臺(tái)或輸出到文件

    springboot使用Logback把日志輸出到控制臺(tái)或輸出到文件

    這篇文章給大家介紹springboot項(xiàng)目使用日志工具Logback把日志不僅輸出到控制臺(tái),也可以輸出到文件的操作方法,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-10-10
  • java利用時(shí)間格式生成唯一文件名的方法

    java利用時(shí)間格式生成唯一文件名的方法

    這篇文章主要介紹了java利用時(shí)間格式生成唯一文件名的方法,需要的朋友可以參考下
    2017-01-01
  • Spring框架實(shí)現(xiàn)AOP的兩種方式詳解

    Spring框架實(shí)現(xiàn)AOP的兩種方式詳解

    這篇文章主要為大家詳細(xì)介紹了Spring框架實(shí)現(xiàn)AOP的兩種方式,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定的借鑒價(jià)值,需要的可以參考一下
    2022-09-09

最新評(píng)論

青冈县| 龙口市| 甘泉县| 中卫市| 清徐县| 萨嘎县| 兴隆县| 和田市| 酒泉市| 长乐市| 大足县| 和田市| 平昌县| 平安县| 彭阳县| 商洛市| 绥德县| 云霄县| 义乌市| 威海市| 芦山县| 电白县| 泗水县| 磐石市| 呼和浩特市| 海盐县| 汉川市| 潜山县| 手机| 岳普湖县| 渑池县| 宿州市| 福海县| 桐庐县| 保亭| 鄂托克前旗| 扶余县| 娄烦县| 昌图县| 永登县| 梁河县|