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

java中歸并排序和Master公式詳解

 更新時(shí)間:2022年01月07日 09:58:22   作者:吃魚的宗介  
大家好,本篇文章主要講的是java中歸并排序和Master公式詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

基本思想

歸并排序采取分治的思想進(jìn)行排序,借用一張圖片說明一下

在這里插入圖片描述

將n個(gè)元素從中間切開,分成兩部分。(左邊可能比右邊多1個(gè)數(shù)) 將步驟1分成的兩部分,再分別進(jìn)行遞歸分解。直到所有部分的元素個(gè)數(shù)都為1。 從最底層開始逐步合并兩個(gè)排好序的數(shù)列。
優(yōu)點(diǎn)在于,分治之后,合并排序的過程時(shí)間復(fù)雜度是O(N)(只需要掃描一遍就可以將兩個(gè)有序的數(shù)組合并成一個(gè)有序數(shù)組)

實(shí)現(xiàn)

  public static void MergeSort(int[] arr,int l , int r) {
        if (l == r || r < 0){
            return;
        }
        int middle = l+(r-l)/2; //取中值,可以防止達(dá)到Integer.MaxValue 溢出
        MergeSort(arr,l,middle);
        MergeSort(arr,middle+1,r);
        sort(arr,l,middle,r);
    }
    /**
     *
     * @param arr 等待排序的數(shù)組
     * @param l 左數(shù)組第一個(gè)指針
     * @param middle 分割左右數(shù)組
     * @param r 右數(shù)組最后一個(gè)指針
     */
    private static void sort(int[] arr, int l, int middle, int r) {
        int[] temp = new int[arr.length];
        System.arraycopy(arr, 0, temp, 0, arr.length);
        int right_first = middle+1;
        int tempIndex = l;
        while (l <= middle && right_first <= r){
            if (temp[tempIndex] < temp[right_first]){
                arr[l++] = temp[tempIndex++];
            }else {
                arr[l++] = temp[right_first++];
            }
        }
        while (tempIndex <= middle){
            arr[l++] = temp[tempIndex++];
        }
        while (right_first <= r ){
            arr[l++] = temp[right_first++];
        }

    }

對(duì)數(shù)器驗(yàn)證

我們可以寫個(gè)對(duì)數(shù)器,使用暴力排序的方式驗(yàn)證我們的排序方法是否準(zhǔn)確

   //生成1-100內(nèi)隨機(jī)數(shù)組
   public static int[] getParamArrays(){
        int[] result = new int[(int) (Math.random() * 100)];
        //隨機(jī)生成數(shù)
        for (int i = 0; i < result.length; i++) {
            result[i] = (int) (Math.random() * 100);
        }
        return result;
    }
    public static void main(String[] args){
        for (int i = 0; i < 1000000; i++) {
            int[] nums = getParamArrays();
            int[] temp = nums;
            MergeSort(nums,0,nums.length-1);
            Arrays.sort(temp);
            //通過自定義比較次數(shù),對(duì)隨機(jī)數(shù)組進(jìn)行排序驗(yàn)證正確性
            if (!nums.equals(temp)){
                System.out.println("wrong");
            }
        }
        System.out.println("end");
    }

遞歸時(shí)間復(fù)雜度計(jì)算 Master 公式

形如
T(N) = a * T(N/b) + O(N^d)(其中的a、b、d都是常數(shù))
的遞歸函數(shù),可以直接通過Master公式來確定時(shí)間復(fù)雜度
如果 log(b,a) < d,復(fù)雜度為O(N^d)
如果 log(b,a) > d,復(fù)雜度為O(N^log(b,a))
如果 log(b,a) == d,復(fù)雜度為O(N^d * logN)
此公式適用于子遞歸規(guī)模相等的情況下

a表示遞歸的次數(shù)也就是生成的子問題數(shù),b表示每次遞歸是原來的1/b之一個(gè)規(guī)模,O(N^d) 表示分解和合并所要花費(fèi)的時(shí)間之和(除開遞歸的復(fù)雜度)
此處就是 T(N)= 2*T(N/2)+O(N^1) 適用于第三種情況 復(fù)雜度為 O(nlogn)

總結(jié)

到此這篇關(guān)于java中歸并排序和Master公式詳解的文章就介紹到這了,更多相關(guān)java歸并排序和Master公式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot詳解整合SpringSecurity實(shí)現(xiàn)全過程

    Springboot詳解整合SpringSecurity實(shí)現(xiàn)全過程

    Spring Security基于Spring開發(fā),項(xiàng)目中如果使用Springboot作為基礎(chǔ),配合Spring Security做權(quán)限更加方便,而Shiro需要和Spring進(jìn)行整合開發(fā)。因此作為spring全家桶中的Spring Security在java領(lǐng)域很常用
    2022-07-07
  • java?Map.Entry的使用示例

    java?Map.Entry的使用示例

    Map.Entry是Java中Map接口的嵌套接口,它提供了獲取鍵和值的方法及遍歷和操作Map的鍵值對(duì),本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-11-11
  • mybatis對(duì)象List<String> List<Integer>屬性映射方式

    mybatis對(duì)象List<String> List<Integer>屬性映射方式

    這篇文章主要介紹了mybatis對(duì)象List<String> List<Integer>屬性映射方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java?BoxLayout(盒子布局)布局管理器解析

    Java?BoxLayout(盒子布局)布局管理器解析

    這篇文章主要介紹了Java?BoxLayout(盒子布局)布局管理器解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中的LinkedHashMap源碼詳解

    Java中的LinkedHashMap源碼詳解

    這篇文章主要介紹了Java中的LinkedHashMap源碼詳解,LinkedHashMap的實(shí)現(xiàn)方式是將所有的Entry節(jié)點(diǎn)鏈入一個(gè)雙向鏈表,并且它的底層數(shù)據(jù)結(jié)構(gòu)是HashMap,因此,LinkedHashMap具有HashMap的所有特性,但在存取元素的細(xì)節(jié)實(shí)現(xiàn)上有所不同,需要的朋友可以參考下
    2023-09-09
  • SpringCloud之動(dòng)態(tài)刷新、重試、服務(wù)化的實(shí)現(xiàn)

    SpringCloud之動(dòng)態(tài)刷新、重試、服務(wù)化的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud 之動(dòng)態(tài)刷新、重試、服務(wù)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解

    Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解

    這篇文章主要為大家介紹了Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java類初始化執(zhí)行流程解析

    Java類初始化執(zhí)行流程解析

    這篇文章主要介紹了Java類初始化執(zhí)行流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Java 時(shí)間日期詳細(xì)介紹及實(shí)例

    Java 時(shí)間日期詳細(xì)介紹及實(shí)例

    這篇文章主要介紹了Java 時(shí)間日期詳細(xì)介紹及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java 詳解垃圾回收與對(duì)象生命周期

    Java 詳解垃圾回收與對(duì)象生命周期

    這篇文章主要介紹了Java 詳解垃圾回收與對(duì)象生命周期的相關(guān)資料,這里對(duì)堆內(nèi)存與棧內(nèi)存進(jìn)行詳解及JVM 的生命周期介紹,需要的朋友可以參考下
    2017-01-01

最新評(píng)論

乌兰察布市| 常宁市| 蒙山县| 许昌市| 白河县| 建瓯市| 南康市| 横峰县| 资阳市| 乌拉特后旗| 桦川县| 河东区| 定结县| 清丰县| 沧州市| 府谷县| 沂水县| 虎林市| 图木舒克市| 横山县| 郴州市| 静乐县| 苍梧县| 昌黎县| 美姑县| 乌拉特中旗| 湘西| 武邑县| 咸宁市| 绥中县| 井冈山市| 天等县| 恭城| 巴林右旗| 海宁市| 泰顺县| 永康市| 武邑县| 绥芬河市| 图们市| 徐州市|