先直接給出**:
#include #include #include void mergearray(int *a,int left,int mid,int right,int *tmp)else
}//將剩餘的值賦值給臨時陣列
while(i <= m)
while(j <= n)
//將臨時陣列複製到目標陣列
for(i = 0; i < k; i++)
}void mergesort(int *a,int left, int right,int *tmp)
}int main();
int b[sizeof(a)/sizeof(int)];
mergesort(a,0,sizeof(a)/sizeof(int) - 1,b);
for(int i = 0; i < sizeof(a)/sizeof(int); i++)
return 0;
}
給出歸併排序的過程:
1.將乙個陣列按照每一次分兩個陣列,子陣列也像這樣一樣分下去,直到陣列中只剩下了乙個元素
2.根據第一步的結果,從左右兩個陣列中,分別在選出乙個資料,比較她們的大小,將比較小的寫入到目標陣列中,直到其中的一方沒有了資料,然後將另一方加在資料的後面
排序 歸併排序(二路歸併)
基本思想 將兩個有序表合併成乙個有序表。將下列兩個已排序的順序表合併成乙個已排序表。順序比較兩 者的相應元素,小者移入另一表中,反覆如此,直至其中任一表都移入另 一表為止。二路歸併排序的基本思想是將兩個有序表合併成乙個有序表。給定排序碼46,55,13,42,94,05,17,70,二路歸併排序過程...
二路歸併排序
不是困難的演算法,不過也是練習了下遞迴。include include include using namespace std const int maxn 100 5 int a maxn int b maxn void mergesort int a,int b,int begin,int en...
二路歸併排序
二路歸併排序是將兩個有序表合併成乙個有序表的排序方法。其基本思想為 序列中有 n個記錄,可以看作為 n個有序子串行,每個序列長度為 1。首先將每相鄰的兩個記錄合併,得到 n 2 個較大的有序子串行,每個序列長度為 2。再將上述子串行兩兩合併,得到 n 2 2 個有序子串行,直至得到乙個長度為 n的有...