C 資料結構 排序方法 歸併排序

2021-10-10 15:37:24 字數 1296 閱讀 5556

請建立乙個一維整型陣列用來儲存待排序關鍵碼,關鍵碼從陣列下標為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 ...