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

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

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

基本思想

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

在這里插入圖片描述

將n個元素從中間切開,分成兩部分。(左邊可能比右邊多1個數(shù)) 將步驟1分成的兩部分,再分別進行遞歸分解。直到所有部分的元素個數(shù)都為1。 從最底層開始逐步合并兩個排好序的數(shù)列。
優(yōu)點在于,分治之后,合并排序的過程時間復雜度是O(N)(只需要掃描一遍就可以將兩個有序的數(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; //取中值,可以防止達到Integer.MaxValue 溢出
        MergeSort(arr,l,middle);
        MergeSort(arr,middle+1,r);
        sort(arr,l,middle,r);
    }
    /**
     *
     * @param arr 等待排序的數(shù)組
     * @param l 左數(shù)組第一個指針
     * @param middle 分割左右數(shù)組
     * @param r 右數(shù)組最后一個指針
     */
    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++];
        }

    }

對數(shù)器驗證

我們可以寫個對數(shù)器,使用暴力排序的方式驗證我們的排序方法是否準確

   //生成1-100內(nèi)隨機數(shù)組
   public static int[] getParamArrays(){
        int[] result = new int[(int) (Math.random() * 100)];
        //隨機生成數(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ù),對隨機數(shù)組進行排序驗證正確性
            if (!nums.equals(temp)){
                System.out.println("wrong");
            }
        }
        System.out.println("end");
    }

遞歸時間復雜度計算 Master 公式

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

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

總結(jié)

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

相關(guān)文章

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

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

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

    java?Map.Entry的使用示例

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

    mybatis對象List<String> List<Integer>屬性映射方式

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

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

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

    Java中的LinkedHashMap源碼詳解

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

    SpringCloud之動態(tài)刷新、重試、服務化的實現(xiàn)

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

    Kotlin?標準函數(shù)和靜態(tài)方法示例詳解

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

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

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

    Java 時間日期詳細介紹及實例

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

    Java 詳解垃圾回收與對象生命周期

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

最新評論

化德县| 金门县| 伊金霍洛旗| 宣武区| 普兰店市| 凭祥市| 静海县| 贵阳市| 保康县| 大足县| 广东省| 定安县| 桃园市| 钟祥市| 霍林郭勒市| 泰和县| 永福县| 兴城市| 隆德县| 皮山县| 漳州市| 玛沁县| 固原市| 阳江市| 松滋市| 宣汉县| 郑州市| 南靖县| 潞城市| 深州市| 河津市| 喀什市| 漳州市| 迭部县| 都江堰市| 抚宁县| 浦东新区| 江山市| 察哈| 南平市| 米泉市|