請建立乙個一維整型陣列用來儲存待排序關鍵碼,關鍵碼從陣列下標為1的位置開始儲存,下標為0的位置不儲存關鍵碼。輸入關鍵碼的個數,以及各個關鍵碼,採用歸併排序的方法對關鍵碼陣列進行排序,輸出每輪的中間過程。
第一行輸入關鍵碼的個數n
第二行輸入n個整型關鍵碼
輸出描述
輸出每輪的關鍵碼陣列,關鍵碼之間以空格隔開,最後乙個關鍵碼後有空格,然後回車,可以有重複的行。
輸入樣例
102 5 9 8 7 4 3 10 16 13
輸出樣例
2 5 8 9 4 7 3 10 13 16
2 5 8 9 3 4 7 10 13 16
2 3 4 5 7 8 9 10 13 16
2 3 4 5 7 8 9 10 13 16
我是用的是非遞迴排序用來輸出比較好理解
#include
using
namespace std;
int data[
100]
;class
sort
;sort::
sort
(int r,
int n)
sort::
~sort()
void sort::
print()
void sort::
merge
(int first1,
int last1,
int last2)
while
(i<=last1)
temp[k++
]=data[i++];
while
(j<=last2)
temp[k++
]=data[j++];
for(i=first1;i<=last2;i++
) data[i]
=temp[i]
;delete
temp;
}void sort::
mergepass
(int h)
if(i+hmerge
(i,i+h-
1,length-1)
;}void sort::
mergesort()
}int
main()
sort t
(a,n)
;//初始化陣列
t.mergesort()
;//進行排序操作
t.print()
;//輸出
return0;
}
資料結構排序 歸併排序
歸併排序是建立在歸併操作上的一種有效的排序演算法,時間複雜度是o nlogn 它過程為 比較a i 和a j 的大小,若a i a j 則將第乙個有序表中的元素a i 複製到r k 中,並令i和k分別加上1 否則將第二個有序表中的元素a j 複製到r k 中,並令j和k分別加上1,如此迴圈下去,直到...
C 資料結構 歸併排序
1 基本思想 自上而下 將兩個的有序數列合併成乙個有序數列,我們稱之為 歸併 歸併排序 merge sort 就是利用歸併思想對數列進行排序。2 工作過程 自上而下 對照下圖 a 如圖所示的陣列進入mergesortup2down1函式,此時start 0,mid 3,end 7。由於使用了遞迴,因...
資料結構 歸併排序
排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...