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

Java 十大排序算法之插入排序刨析

 更新時(shí)間:2021年11月18日 09:37:01   作者:龍弟-idea  
插入排序(InsertionSort),一般也被稱為直接插入排序。對(duì)于少量元素的排序,它是一個(gè)有效的算法。插入排序是一種最簡(jiǎn)單的排序方法,它的基本思想是將一個(gè)記錄插入到已經(jīng)排好序的有序表中,從而一個(gè)新的、記錄數(shù)增 1 的有序表

插入排序原理

①把所有元素分成已排序和未排序兩組

②找到未排序組的第一個(gè)元素,向已經(jīng)排序的組中進(jìn)行插入

③倒序遍歷已經(jīng)排好的元素,依次和待插入的元素進(jìn)行比較,直到找到一個(gè)元素小于等于待插入元素,那么就把待插入元素放到這個(gè)位置,其他元素向后移動(dòng)一位

插入排序API設(shè)計(jì)

類名 Insertion
構(gòu)造方法 Insertion():創(chuàng)建Insertion對(duì)象
成員方法

1.public static void sort(Comparable[] a):對(duì)數(shù)組內(nèi)的元素進(jìn)行排序

2.private static boolean greater(Comparable v,Comparable w):判斷v是否大于w

3.private static void exchange(Comparable[] a,int i,int j):交換a數(shù)組中,索引i和索引j處的值

插入排序代碼實(shí)現(xiàn)

public class Insertion {
    //對(duì)數(shù)組a的元素進(jìn)行排序
    public static void sort(Comparable[] a){
        for(int i=1;i<a.length;i++){
            //當(dāng)前元素為a[i],依次和i前面的元素比較,找到一個(gè)小于等于a[i]的元素
            for(int j=i;j>0;j--){
                if(greater(a[j-1],a[j])){
                    exchange(a,j-1,j);
                }else{
                    //找到了該元素,結(jié)束
                    break;
                }
            }
        }
    }
    //比較v元素是否大于w元素
    private static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;
    }
    //數(shù)組元素i和j交換位置
    private static void exchange(Comparable[] a,int i,int j){
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
}
//測(cè)試代碼
 class Test{
    public static void main(String[] args) {
        Integer[] a={4,3,2,10,12,1,5,6};
        Insertion.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

運(yùn)行結(jié)果:

插入排序的時(shí)間復(fù)雜度分析

和冒泡排序分析相同!

雖然使用了雙層循環(huán),但內(nèi)循環(huán)是真正完成排序的代碼,所以主要分析內(nèi)層循環(huán)的執(zhí)行次數(shù)即可!

在數(shù)組元素為{12,10,6,5,4,3,2,1}為最壞情況

元素的比較次數(shù)為:(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;

元素的交換次數(shù)為:(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;

總執(zhí)行次數(shù)為:2*(N^2/2-N/2)=N^2-N;
根據(jù)大O推導(dǎo)法則,保留最高階項(xiàng),即插入排序的時(shí)間復(fù)雜度為O(N^2)

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

相關(guān)文章

  • 手把手教你JAVA進(jìn)制之間的轉(zhuǎn)換

    手把手教你JAVA進(jìn)制之間的轉(zhuǎn)換

    這篇文章主要介紹了Java實(shí)現(xiàn)的進(jìn)制轉(zhuǎn)換,結(jié)合完整實(shí)例形式分析了Java實(shí)現(xiàn)二進(jìn)制、十六進(jìn)制、字符串、數(shù)組等相關(guān)轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2021-08-08
  • dubbo服務(wù)整合zipkin詳解

    dubbo服務(wù)整合zipkin詳解

    這篇文章主要介紹了dubbo服務(wù)整合zipkin,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java的靜態(tài)類型檢查示例代碼詳解

    Java的靜態(tài)類型檢查示例代碼詳解

    本文將使用幾個(gè)代碼示例,深入講解Java中的類型檢查機(jī)制。一旦完全理解了本文的例子,就完全掌握了Java中的靜態(tài)類型檢查,感興趣的朋友一起看看吧
    2017-11-11
  • 使用Spring的ApplicationEvent實(shí)現(xiàn)本地事件驅(qū)動(dòng)的實(shí)現(xiàn)方法

    使用Spring的ApplicationEvent實(shí)現(xiàn)本地事件驅(qū)動(dòng)的實(shí)現(xiàn)方法

    本文介紹了如何使用Spring的ApplicationEvent實(shí)現(xiàn)本地事件驅(qū)動(dòng),通過自定義事件和監(jiān)聽器,實(shí)現(xiàn)模塊之間的松耦合,提升代碼的可維護(hù)性和擴(kuò)展性。同時(shí)還介紹了異步事件和事件傳遞的相關(guān)知識(shí)
    2023-04-04
  • Spring AOP失效的常見場(chǎng)景分析

    Spring AOP失效的常見場(chǎng)景分析

    Spring的AOP(面向切面編程)是一種強(qiáng)大的技術(shù),用于在應(yīng)用程序中實(shí)現(xiàn)橫切關(guān)注點(diǎn)的模塊化,雖然Spring的AOP在大多數(shù)情況下都是有效的,但在某些場(chǎng)景下可能會(huì)失效,下面來分析Spring AOP失效的常見場(chǎng)景,需要的朋友可以參考下
    2024-01-01
  • java多線程開啟的三種方式你知道嗎

    java多線程開啟的三種方式你知道嗎

    這篇文章主要為大家詳細(xì)介紹了java多線程開啟的三種方式,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>
    2022-02-02
  • Spring Boot 注解方式自定義Endpoint詳解

    Spring Boot 注解方式自定義Endpoint詳解

    這篇文章主要介紹了Spring Boot注解方式自定義Endpoint詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java調(diào)用Shell命令和腳本的實(shí)現(xiàn)

    Java調(diào)用Shell命令和腳本的實(shí)現(xiàn)

    這篇文章主要介紹了Java調(diào)用Shell命令和腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java SpringMVC異常處理機(jī)制詳解

    Java SpringMVC異常處理機(jī)制詳解

    這篇文章主要介紹了springmvc如何進(jìn)行異常處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Spring Aop注解實(shí)現(xiàn)

    Spring Aop注解實(shí)現(xiàn)

    本文我們通過Spring AOP和Java的自定義注解來實(shí)現(xiàn)日志的插入功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友一起看看吧,希望對(duì)你有所幫助
    2021-07-07

最新評(píng)論

北碚区| 于田县| 德惠市| 上杭县| 抚顺市| 文安县| 上高县| 长丰县| 温州市| 岱山县| 大同县| 大埔区| 达州市| 虎林市| 乌兰县| 马关县| 凌云县| 密山市| 分宜县| 疏勒县| 上思县| 张家口市| 江陵县| 台东市| 应城市| 宽甸| 饶阳县| 闻喜县| 清丰县| 扶风县| 黔南| 永宁县| 太白县| 沐川县| 女性| 宜春市| 旌德县| 石阡县| 玉龙| 兴文县| 大荔县|