參考部落格:白話經典演算法系列之五 歸併排序的實現
/***********************
* 功能:歸併排序
************************/
#include
//方法宣告
void
merge
(int a,
int,
int,
int)
;void
mergesort
(int a,
int,
int)
;void
printarr
(int a,
int)
;int
main
(void);
printf
("排序前的陣列元素:\n");
printarr
(arr,12)
;mergesort
(arr,0,
12);printf
("歸併排序後的陣列元素:\n");
printarr
(arr,12)
;return0;
}//遞迴和合併
void
mergesort
(int a,
int l,
int r)
}//先把乙個序列分成兩個字序列,然後再合併成乙個序列
/** l:表示左序列的起點
* m:表示右序列的起點
* r:表示右序列的終點
*/void
merge
(int a,
int l,
int m,
int r)
//將序列中的元素賦值給右序列
for(
int n=
0;n)//將左右兩個序列的元素一次比較,較小者填入到原序列中
int i=0;
int j=0;
int k=l;
/* * i:表示左序列的起點
* j:表示右序列的起點
* l:表示原序列的起點
*/while
(ielse
}//如果某乙個子串行訪問完了,就將另乙個子串行中的元素直接寫到原序列中
while
(iwhile
(jdelete[
] left;
delete[
] right;
}void
printarr
(int a,
int n)
printf
("\n");
}
結果顯示:
問題總結:vc6.0在定義陣列的時候要初始化大小,一般不能傳入引數,為解決這一問題,需要使用int *p=new int[arraysize];
,然後再使用delete p
,將用完以後的p刪除掉。
歸併排序演算法實現
const int maxn 100 將陣列a的 l1,r1 與 l2,r2 區間合併為有序區間 此處l2即為r1 1 void merge int a,int l1,int r1,int l2,int r2 while i r1 temp index a i 將 l1,r1 剩餘元素加入temp ...
歸併排序演算法實現
關於歸併排序演算法的思想,網上有很多介紹,這裡不再解釋,這裡提供了乙個j a類,讀者可以把類潛入到自己的程式中,直接呼叫,免去了重新編寫歸併排序的過程。具體的j a 如下 1 import j a.util.2class mergesort 2021 public static void merge...
歸併排序演算法的實現
近期由於找工作,對歸併排序演算法也進行了一些研究,雖然網上有很多類似的演算法 實現,但是總是不太完整,閒來無聊對其他人的演算法 進行了一些整理,整理出了乙份完整的實現 感謝其他部落格的原創,也希望愛好程式設計的人能借鑑。下面是具體的 實現 include include 複製陣列 source 源陣...