歸併排序演算法的實現

2021-10-05 08:32:17 字數 1539 閱讀 2508

參考部落格:白話經典演算法系列之五 歸併排序的實現

/***********************

* 功能:歸併排序

************************/

#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 源陣...