歸併排序時間複雜度分析

2021-10-06 22:48:50 字數 1027 閱讀 6555

// 歸併

public

void

static

main()

int leftarray =

newint

[num >>2]

;}public

void

static

sort

(int begin,

int end,

int[

] array,

int[

] leftarray)

public

void

static

merge

(int begin,

int mid,

int end,

int[

] array,

int[

] leftarray)

while

(li < le)

else

}}

合併排序是比較複雜的排序,特別是對於不了解分治法基本思想的同學來說可能難以理解。總時間=分解時間+解決問題時間+合併時間。分解時間就是把乙個待排序序列分解成兩序列,時間為一常數,時間複雜度o(1).解決問題時間是兩個遞迴式,把乙個規模為n的問題分成兩個規模分別為n/2的子問題,時間為2t(n/2).合併時間複雜度為o(n)。總時間t(n)=2t(n/2)+o(n).這個遞迴式可以用遞迴樹來解,其解是o(nlogn).此外在最壞、最佳、平均情況下歸併排序時間複雜度均為o(nlogn).從合併過程中可以看出合併排序穩定

用遞迴樹的方法解遞迴式t(n)=2t(n/2)+o(n):假設解決最後的子問題用時為常數c,則對於n個待排序記錄來說整個問題的規模為cn。

從這個遞迴樹可以看出,第一層時間代價為cn,第二層時間代價為cn/2+cn/2=cn……每一層代價都是cn,總共有logn+1層。所以總的時間代價為cn*(logn+1).時間複雜度是o(nlogn).

歸併排序時間複雜度分析

主要參考了他的博文,他還講解了其他排序的時間複雜度分析及演算法實現。可以說合併排序是比較複雜的排序,特別是對於不了解分治法基本思想的同學來說可能難以理解。總時間 分解時間 解決問題時間 合併時間。分解時間就是把乙個待排序序列分解成兩序列,時間為一常數,時間複雜度o 1 解決問題時間是兩個遞迴式,把乙...

歸併排序時間複雜度 主定理

這是 漫談經典排序演算法系列 第四篇,解析了歸併排序。各種排序演算法的解析請參考如下 漫談經典排序演算法 一 從簡單選擇排序到堆排序的深度解析 漫談經典排序演算法 二 各種插入排序解析及效能比較 漫談經典排序演算法 三 氣泡排序 快速排序 漫談經典排序演算法 四 歸併排序 漫談經典排序演算法 五 線...

歸併排序時間複雜度 聽說你還不會歸併排序?

作者 超悅人生 責編 郭芮 本文介紹了歸併排序的基本思想,遞迴方法的一般寫法,最後一步步手寫歸併排序,並對其效能進行了分析。基本思想歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法的乙個非常典型的應用。即先使每個子串行有序,再將已有序的子串行合併,得到完全有序的序列。這裡給出一...