归并排序原理比较简单,但是占用一个n的数组。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int b[N];
void mergesort(int* a, int start, int end, int* b)
{
if(start == end)
{
return;
}
int mid = (start+end)/2;
mergesort(a, start, mid, b);
mergesort(a, mid+1, end, b);
int i=start, j=mid+1, k = start;
while(i <= mid && j <= end)
{
if(a[i]<a[j])
{
b[k++] = a[i];
i++;
}
else
{
b[k++] = a[j];
j++;
}
}
while(i<=mid)
{
b[k++] = a[i];
i++;
}
while(j<=end)
{
b[k++] = a[j];
j++;
}
for(int m=start; m<=end; m++)
{
a[m] = b[m];
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
mergesort(a, 0, n-1, b);
for (int i = 0; i < n; ++i) {
cout << a[i] << ' ';
}
}