1. 程式人生 > 其它 >C++實現歸併排序

C++實現歸併排序

技術標籤:C++演算法演算法C++

#include<iostream>
#include<time.h>
using namespace std;

void PrintArry(int s[], int n)	//列印陣列
{
	for (int i = 0; i < n; i++)
	{
		cout << s[i] << " ";
	}
	cout << endl;
}

void Merge(int s[],int s2[],int begin,int mid,int end)	//合併子序列
{
	int
b = begin, m = mid + 1, k = begin; while (b <= mid && m <= end) { if (s[b] <= s[m]) //取較小者存入新陣列s2中 s2[k++] = s[b++]; else s2[k++] = s[m++]; } while (b <= mid) //若第一個子序列沒有處理完,則進行收尾操作 { s2[k++] = s[b++]; } while (m <= end) //若第二個子序列沒有處理完,則進行收尾操作 { s2[k++
] = s[m++]; } } void MergeSort(int s[], int begin, int end) { int midIndex, s2[100]; if (begin == end) return; else { midIndex = (begin + end) / 2; MergeSort(s, begin, midIndex); MergeSort(s, midIndex + 1, end); Merge(s, s2, begin, midIndex, end); } for (int i = begin; i <= end; i++
) //將有序得序列存入陣列中 { s[i] = s2[i]; } } int main() { srand(time(NULL)); int s[100]; //陣列容量上限 int n; cout << "輸入個數n: "; cin >> n; for (int i = 0; i < n; i++) { s[i] = rand() % 30 + 1; } cout << "初始陣列:" << endl; PrintArry(s, n); MergeSort(s, 0, n-1); cout << "歸併排序後陣列:" << endl; PrintArry(s, n); system("pause"); return EXIT_SUCCESS; }

結果截圖
在這裡插入圖片描述