C++實現歸併排序
阿新 • • 發佈:2020-12-11
#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;
}
結果截圖