归并排序
#include<iostream>
using namespace std;
const int N = 1000010;
int n;
int q[N],tem[N];
void Merge_sort(int q[],int left,int right)
{
if(left>= right)
return ;
int mid = (left+right) >>1;
Merge_sort(q,left,mid);
Merge_sort(q,mid+1,right);
int num = 0,i =left,j =mid+1;(2)
while(i <=mid && j <=right )
{
if(q[i]<=q[j])
tem[num++] = q[i++];
else
tem[num++] = q[j++];(1)
}
while(i<=mid) tem[num++] = q[i++];
while(j<=right) tem[num++] = q[j++];
for(int m=left,n=0;m<=right;m++,n++)
q[m] = tem[n];
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&q[i]);
Merge_sort(q,0,n-1);
for(int i = 0;i < n ; i++) printf("%d ",q[i]);
return 0;
}
Ps:
(1)注意判断条件 相等的时候 i ++
(2)j = mid + 1
(1).注意这里 i 、j 的值,分别是分开后两个数组的头部