归并排序:
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int fly[N],tmp[N]; // tmp数组作为临时存放数据的数组
int n; // 输入n个数
void merge_sort(int q[],int l,int r)
{
if (l >= r)
{
return ;
}
int mid = (l + r) >> 1;
int i = l,j = mid + 1,k = 0; //k为tmp的下标
merge_sort(q,l,mid);
merge_sort(q,mid + 1,r);
while (i <= mid && j <= r)
{
if (q[i] <= q[j])
{
tmp[k++] = q[i++];
}
else
{
tmp[k++] = q[j++];
}
}
while (i <= mid)
{
tmp[k++] = q[i++];
}
while (j <= r)
{
tmp[k++] = q[j++];
}
for (i = l,k = 0;i <= r;i++,k++) // 注意i必须从l开始,不能从0开始
{
q[i] = tmp[k];
}
}
int main ()
{
scanf ("%d",&n);
for (int i = 0;i < n;i++)
{
scanf ("%d",&fly[i]);
}
merge_sort(fly,0,n - 1);
for (int i = 0;i < n;i++)
{
printf ("%d ",fly[i]);
}
return 0;
}