自己的归并排序写的不好。
主要是提醒一下第三个测试点,m > n时, 要修改m的值
#include <iostream>
#include <cstdlib>
using namespace std;
const int MAXNUM = 1100000;
long int arr[MAXNUM];
long int temp[MAXNUM];
//合并
void Merge(int st, int mid, int ed)
{
int i = st, j = mid + 1;
int k = st;
for (; i <= mid && j <= ed; k++)
{
if (arr[i] > arr[j])
{
temp[k] = arr[i];
i++;
}
else
{
temp[k] = arr[j];
j++;
}
}
while (i <= mid)
{
temp[k] = arr[i];
k++;
i++;
}
while (j <= ed)
{
temp[k] = arr[j];
k++;
j++;
}
for (int k = st; k <= ed; k++)
arr[k] = temp[k];
}
//
void MergeSort(int st, int ed)
{
if (st < ed)
{
int mid = (st + ed) / 2;
MergeSort(st, mid);
MergeSort(mid + 1, ed);
Merge(st, mid, ed);
}
}
int main()
{
//ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> arr[i];
MergeSort(0, n-1);
//这里
if (m > n) m = n;
for (int i = 0; i < m; i++)
{
if (i) cout << " ";
cout << arr[i];
}
cout << endl;
system("pause");
return 0;
}