對n個不同的數構成的陣列
a[1..n]
進行排序,其中
n=2^k,要求用歸併排序進行排序。
歸併排序:當我們要對陣列進行排序的時候,我們首先把這個陣列分成一半,然後就是對左邊的陣列和右邊的陣列分別進行排序,之後將他們合併起來,然而對左右兩邊陣列進行排序的時候要用到分治的思想,對左右兩個陣列進行歸併排序,也就是說還得將左右兩個陣列在分成一半,然後對每個部分進行排序,再歸併。
如圖模擬了歸併的過程:
排序過程
else
if(j>r)
else
if(aux[i-l]>aux[j-l])
else
}
}void merge_sort(int l,int r)//
歸併複雜度分析:每次二分進行o(n)遍歷,二分的複雜度為
log(n)
所以總的複雜度就是
t=o(nlogn)
演算法分析4
1.題目描述 對於表示式n2 n 41,當n 在 x,y 範圍內取整數值時 包括 x,y 39 x,y 50 判定該表示式的值是否都為素數。輸入 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當 x 0,y 0 時,表示輸入結束,該行不做處理。輸出 對於每個給定範圍內的取值,如果表示式的值都為素...
演算法分析與設計作業4 歸併排序
二分歸併排序 對n個不同的數構成的陣列a 1 n 進行排序,其中n 2 k 先將雜亂的數字兩兩分組,對兩個數字比較大小進行排序,再將兩個排序好的陣列按順序歸併,依此迴圈k次,直至所有小陣列被歸併為完整的大陣列。void merge int num 1,int num 2,int i,int s,in...
演算法分析課作業
求陣列中最大的最小數之差 法一 temp 58,65,32,100,12,20,87,3,88 temp.sort print temp print temp.pop temp 0 結果 3,12,20,32,58,65,87,88,100 97法二 temp 58,65,32,100,12,20,...