国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

歸并排序算法(Java實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了歸并排序算法(Java實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.歸并排序算法思想

也稱合并排序算法,是將兩個(gè)或兩個(gè)以上的有序數(shù)據(jù)序列合并成一個(gè)新的有序數(shù)據(jù)序列。該算法采用分治法(Divide and Conquer)的思想,將待排序的序列分成若干個(gè)子序列,分別對(duì)子序列進(jìn)行排序,然后將有序的子序列合并成一個(gè)大的有序序列
注:將幾個(gè)有序隊(duì)列合并成一個(gè)新的有序數(shù)據(jù)隊(duì)列就稱為幾路歸并排序算法

2.歸并排序算法實(shí)現(xiàn)步驟

歸并排序的基本步驟如下:
(1)分解
將待排序的序列分成若干個(gè)子序列,每個(gè)子序列都是有序的。這是通過遞歸實(shí)現(xiàn)的,每次遞歸都將原序列分成兩個(gè)子序列
(2)解決
對(duì)每個(gè)子序列進(jìn)行排序。這是通過遞歸調(diào)用的方式實(shí)現(xiàn)的,遞歸調(diào)用歸并排序函數(shù)對(duì)子序列進(jìn)行排序。
(3)歸并
將已排序的子序列歸并成一個(gè)大的有序序列。這是通過歸并操作實(shí)現(xiàn)的,將兩個(gè)有序的子序列歸并成一個(gè)新的有序序列。在歸并的過程中,采用歸并算法(Merge Algorithm)將兩個(gè)有序的子序列歸并成一個(gè)新的有序序列。具體操作如下:
1)初始化兩個(gè)指針i和j,分別指向兩個(gè)子序列的起始位置。
2)比較兩個(gè)指針?biāo)赶虻脑?,將較小的元素復(fù)制到一個(gè)臨時(shí)數(shù)組中,然后將指針加1,繼續(xù)比較下一個(gè)元素。
3)當(dāng)一個(gè)指針到達(dá)子序列的末尾時(shí),將另一個(gè)子序列剩余的元素復(fù)制到臨時(shí)數(shù)組中。
4)將臨時(shí)數(shù)組中的元素復(fù)制回原數(shù)組,完成合并操作。
通過遞歸調(diào)用和合并操作,最終得到一個(gè)有序的序列文章來源地址http://www.zghlxwxcb.cn/news/detail-797016.html

3.歸并排序算法性能分析

性能 性能指標(biāo)
最壞時(shí)間復(fù)雜度 O ( n log ? 2 n ) O(n\log_{2^n}) O(nlog2n?)
最好時(shí)間復(fù)雜度 O ( n log ? 2 n ) O(n\log_{2^n}) O(nlog2n?)
平均時(shí)間復(fù)雜度 O ( n log ? 2 n ) O(n\log_{2^n}) O(nlog2n?)
空間復(fù)雜度 O(n)
穩(wěn)定性 穩(wěn)定

4.歸并排序算法代碼實(shí)現(xiàn)(Java實(shí)現(xiàn))

public class Demo {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
        mergeSort(arr,0,arr.length-1);
        for(int i:arr){
            System.out.println(i);
        }
    }
    //歸并排序的歸并操作
    public static void merge(int[] arr,int low,int mid ,int high){
        int i,j,k;
        int[] tempArr = new int[arr.length];//輔助數(shù)據(jù)
        for(k = low; k <=high; k++){ //將原數(shù)組復(fù)制到輔助數(shù)組中
            tempArr[k] = arr[k];
        }
        //arr[low...mid]和arr[mid+1...high]各自有序,將兩個(gè)部分歸并
        for(i=low, j=mid+1, k=i; i<=mid && j <= high; k++){
            if(tempArr[i] > tempArr[j]){ //“>”號(hào)代表升序,“<”號(hào)代表降序
                arr[k] = tempArr[i++];
            }else{
                arr[k] = tempArr[j++];
            }
        }
        while(i <= mid){ //將左半部分的剩余元素依次放入到新數(shù)組中
            arr[k] = tempArr[i++];
            k++;
        }
        while( j <= high){ //將右半部分的剩余元素依次放入到新數(shù)組中
            arr[k] = tempArr[j++];
            k++;
        }
    }
    //歸并排序的遞歸部分
    public static void mergeSort(int[] arr,int low,int high){
       if(low < high){ // 遞歸結(jié)束條件
           int mid = (low + high)/2;
           mergeSort(arr,low,mid); //對(duì)數(shù)組左半部分歸并排序
           mergeSort(arr,mid+1,high); //對(duì)數(shù)組右半部分歸并排序
           merge(arr,low,mid,high); //歸并
       }
    }
}

到了這里,關(guān)于歸并排序算法(Java實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • (java版)排序算法----【冒泡,選擇,插入,希爾,快速排序,歸并排序,基數(shù)排序,堆排序】超詳細(xì)~~

    (java版)排序算法----【冒泡,選擇,插入,希爾,快速排序,歸并排序,基數(shù)排序,堆排序】超詳細(xì)~~

    目錄 冒泡排序(BubbleSort): 代碼詳解: ?冒泡排序的優(yōu)化: ?選擇排序(SelectSort): 代碼詳解: ?插入排序(InsertSort): 代碼詳解: ?希爾排序(ShellSort): ?法一(交換法)代碼詳解: ?法二(移位法--插入排序的優(yōu)化)代碼詳解: 快速排序(QuickSort):? 代碼詳解: ?歸并排

    2024年02月20日
    瀏覽(28)
  • 七大排序算法——?dú)w并排序,通俗易懂的思路講解與圖解(完整Java代碼)

    七大排序算法——?dú)w并排序,通俗易懂的思路講解與圖解(完整Java代碼)

    排序:所謂排序,就是使一串記錄,按照其中的某個(gè)或某些的大小,遞增或遞減的排列起來的操作。 上述待排序的數(shù)中,有兩個(gè)5。 將 前面 的5標(biāo)記一個(gè)a, 將 后面 的5標(biāo)記一個(gè)b。 通過算法進(jìn)行排序后,這一組數(shù)就有序了, 但是要看兩個(gè)相同的5的位置是否有改變。

    2024年02月15日
    瀏覽(25)
  • Java實(shí)現(xiàn)歸并排序

    歸并排序是一種分治算法,其基本思想是將數(shù)組分成兩部分,分別進(jìn)行排序,然后將結(jié)果合并。這種算法是分治法的典型應(yīng)用。下面的Java代碼實(shí)現(xiàn)了歸并排序,包括遞歸和非遞歸兩種方式。 遞歸方法實(shí)現(xiàn) 遞歸方法 mergeSort1 首先檢查輸入數(shù)組 arr 是否為空或長度小于2,若是則

    2024年02月16日
    瀏覽(17)
  • Java 語言實(shí)現(xiàn)選擇排序算法

    【引言】 選擇排序算法是一種簡單但有效的排序算法。它的原理是每次從未排序的元素中選擇最小(或最大)的元素,放在已排序的末尾(或開頭),逐漸形成有序序列。本文將使用Java語言實(shí)現(xiàn)選擇排序算法,并詳細(xì)講解其思想和代碼實(shí)現(xiàn)。 【算法思想】 選擇排序的核心思

    2024年02月11日
    瀏覽(23)
  • 插入、希爾、歸并、快速排序(java實(shí)現(xiàn))

    插入、希爾、歸并、快速排序(java實(shí)現(xiàn))

    目錄 插入排序 希爾排序 歸并排序 快速排序 插入排序 排序原理: 1.把所有元素分為兩組,第一組是有序已經(jīng)排好的,第二組是亂序未排序。 2.將未排序一組的第一個(gè)元素作為插入元素,倒序與有序組比較。 3.在有序組中找到比插入元素小或者大的元素,將插入元素放入該位

    2024年02月13日
    瀏覽(21)
  • Java高級(jí)語言實(shí)現(xiàn)插入排序算法

    【引言】 插入排序算法是一種簡單且常用的排序算法。它通過依次將未排序的元素插入已排序序列中的正確位置來達(dá)到排序的目的。本文將使用Java高級(jí)語言實(shí)現(xiàn)插入排序算法,并講解其核心思想和代碼實(shí)現(xiàn)。 【算法思想】 插入排序的核心思想是通過構(gòu)建有序序列,對(duì)于未排

    2024年02月11日
    瀏覽(23)
  • 【Java數(shù)據(jù)結(jié)構(gòu)與算法】Day2-高級(jí)排序(希爾、歸并、快速、計(jì)數(shù))

    【Java數(shù)據(jù)結(jié)構(gòu)與算法】Day2-高級(jí)排序(希爾、歸并、快速、計(jì)數(shù))

    ?作者簡介:熱愛Java后端開發(fā)的一名學(xué)習(xí)者,大家可以跟我一起討論各種問題喔。 ??個(gè)人主頁:Hhzzy99 ??個(gè)人信條:堅(jiān)持就是勝利! ??當(dāng)前專欄:【Java數(shù)據(jù)結(jié)構(gòu)與算法】 ??本文內(nèi)容:Java數(shù)據(jù)結(jié)構(gòu)與算法中的比較高級(jí)的排序,希爾排序、歸并排序、快速排序、計(jì)數(shù)排序

    2024年02月02日
    瀏覽(34)
  • 【排序算法】歸并排序(C語言)

    【排序算法】歸并排序(C語言)

    【排序算法】—— 歸并排序(C語言) 歸并排序(MergeSort) 是建立在歸并操作上的一種有效的排序算法,采用分治法排序,分為 分解 、 合并 兩個(gè)步驟。 分解 :將數(shù)組分割成兩個(gè)數(shù)組,再分別將兩個(gè)數(shù)組又細(xì)分成2個(gè)數(shù)組,直到,最后每個(gè)數(shù)組都是一個(gè)元素,這時(shí)將該單元

    2024年02月08日
    瀏覽(14)
  • C語言實(shí)現(xiàn)八大排序算法(詳解插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序(遞歸和非遞歸)、歸并排序(遞歸和非遞歸)和計(jì)數(shù)排序)

    C語言實(shí)現(xiàn)八大排序算法(詳解插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序(遞歸和非遞歸)、歸并排序(遞歸和非遞歸)和計(jì)數(shù)排序)

    本篇文章使用C語言實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)中常見的八大排序算法,它們分別是 插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序、歸并排序和計(jì)數(shù)排序 。在排序算法的實(shí)現(xiàn)過程中,每種算法都有其獨(dú)特的特點(diǎn)和適用場景。插入排序通過逐步構(gòu)建有序序列來排序,希爾

    2024年01月24日
    瀏覽(23)
  • 排序算法-歸并排序(含C語言代碼示例)

    ????????歸并排序是一種基于分治思想的經(jīng)典排序算法,其主要思想是將待排序的數(shù)組分割成兩個(gè)子數(shù)組,分別對(duì)這兩個(gè)子數(shù)組進(jìn)行遞歸排序,然后將排好序的子數(shù)組合并起來得到最終有序數(shù)組。整個(gè)歸并排序的過程可以分為三個(gè)步驟:分割、排序和合并。 ????????首

    2024年01月16日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包