二路歸併排序c 實現

2021-05-25 21:12:17 字數 877 閱讀 7912

/*

歸併排序的基本操作是

將兩個或兩個以上的記錄有序序列歸併為乙個有序序列。

最簡單的情況是,只含乙個記錄的序列顯然是個有序序列,

經過"逐趟歸併"使整個序列中的有序子串行的長度逐趟增大,

直至整個記錄序列為有序串行止。

2-路歸併排序則是歸併排序中的一種最簡單的情況,

它的基本操作是將兩個相鄰的有序子串行"歸併"為乙個有序序列,

如右側所示。這個操作對順序表而言是極其容易實現的,

只要依關鍵字從小到大進行"複製"即可,如下演算法所示。

*/#include

using std::cout;

using std::endl;

void merge(int *sr, int *tr, int i, int m, int n)else

}while (i<=m) tr[k++] = sr[i++];  // 將剩餘的 sr[i..m] 複製到tr

while (j<=n) tr[k++] = sr[j++];  // 將剩餘的 sr[j..n] 複製到tr

}//merge

void msort( int *sr, int *tr1, int s, int t )else // else

} // msort

int main()

;cout<<"注意:只整個陣列r[0....9]10個元素排序"

cout << endl;

msort(li,li,0,9);

cout << endl;

for(int i = 1; i<=10; i++)

cout << endl;

return 0;

}

二路歸併排序C 實現

基本思想 二路歸併排序就是將兩個有序子表歸併成乙個有序表。首先我們得有乙個演算法用於歸併 兩個有序表放在同一陣列的相鄰位置上,arr left 到arr center 1 為第乙個有序表,arr center 到arr right 是第二個有序表。每次從兩端中取出乙個進行比較,小的先放在乙個temp...

歸併排序(二路歸併)

歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個 二路歸併為兩個 有序陣列形成新的有序表。思路 將陣列分為n nn個一元組,兩兩合併得到二元組,以此類推共合併log 2n log 2n log2 n 次後,陣列變得有序。時間複雜度為o n logn o nlogn o nlog n 編譯環境de...

二路歸併排序

不是困難的演算法,不過也是練習了下遞迴。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...