归并排序 nlongn
运用分治的思想 递归
模板题
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N], temp[N];
void merge_sort(int q[],int l,int r)
{
if(l >= r) return ;
int mid = l + r >> 1;
merge_sort(q, l, mid);
merge_sort(q, mid + 1, r);
int i = l, j = mid + 1, k = 0;
while(i <= mid && j <= r)
{
if(q[i] <= q[j]) temp[k ++ ] = q[i ++ ];
else temp[k ++ ] = q[j ++ ];
}
while(i <= mid) temp[k ++ ] = q[i ++ ];
while(j <= r) temp[k ++ ] = q[j ++ ];
for(int i = l, j = 0; i <= r; i ++ , j ++ )
{
q[i] = temp[j];
}
}
int main ()
{
cin >> n;
for(int i = 0; i < n; i ++ )
{
scanf("%d", &a[i]);
}
merge_sort(a, 0, n - 1);
for(int i = 0; i < n; i ++ )
{
printf("%d ", a[i]);
}
return 0;
}