導航:首頁 > 編程語言 > 歸並排序java非遞歸

歸並排序java非遞歸

發布時間:2024-10-18 10:14:02

① 簡述二路歸並排序,並分析其演算法復雜性。

二路歸並,就是將兩個有序序列,合並為一個有序的序列

而排序最初是一個無序序列,此時就要將其分解為兩個有序序列
這里就用到一個遞歸的思想
即:將該演算法截為兩段,對前後兩段應用該演算法均可得到一個有序序列,這是就有了兩個有序序列,再使用該演算法就最終得到一個有序序列
而遞歸終點是當分段內只有一個元素時,顯然就是有序序列了,就可以返回

具體的代碼為:
void Merge(int r[],int r1[],int s,int m,int t)//二路歸並
{
int i=s,j=m+1,k = s;
while(i<=m && j<=t)
{
if (r[i] <= r[j]) r1[k++] = r[i++];
else r1[k++] = r[j++];
}
if(i <= m)
{
while(i <= m)
r1[k++] = r[i++];
}
else
{
while (j <= t)
r1[k++] = r[j++];
}
}

void MergeSort(int r[],int r1[],int s,int t)//遞歸調用
{
if(s == t) r1[s] = r[s];
else{
m = (s + t)/2;
MergeSort(r,r1,s,m);
MergeSort(r,r1,m+1,t);
Merge(r1,r,s,m,t);
}
}

至於它的時間復雜度,從嚴格分析上說是O(nlog2n),我做過測試,它在較大數據排序時,性能不亞於快排,堆排,並且和初始數據順序性無關,是一種穩定的排序演算法
至於缺點就是它的空間復雜度,達到O(n)

此外,它還有非遞歸演算法,思想都是一樣的,我就不多說了,如果你需要,可以Hi我

閱讀全文

與歸並排序java非遞歸相關的資料

熱點內容
網路安全風險案例 瀏覽:46
司法考試哪個網站好 瀏覽:469
android搜索功能代碼 瀏覽:437
文件名如何沒有文字 瀏覽:601
吃雞地圖資源包文件路徑 瀏覽:267
cad文件轉移手機 瀏覽:733
指定區域網內文件delphi 瀏覽:638
蘋果5s充電介面維修 瀏覽:913
建行app怎麼老是信息填寫錯誤 瀏覽:832
羅技g903切換配置文件 瀏覽:649
游戲的數據在哪個英文文件夾 瀏覽:435
編程一般學什麼專業課 瀏覽:394
不屬於資料庫系統的主要組成部分 瀏覽:797
jdl是什麼網路詞 瀏覽:247
優酷的緩存視頻文件夾 瀏覽:842
jsp頁面獲取地址欄參數 瀏覽:893
怎麼帶小度app聽酷狗音樂的歌 瀏覽:17
icleanerpro白蘋果 瀏覽:786
2016年1024客戶端安卓 瀏覽:136
win7連接不了網路列印機共享的列印機 瀏覽:214

友情鏈接