归并排序思想:
把一个长的待排序的序列拆为两段,mid=(a+b)/2
如果新的一段长度大于一,再拆开直到为一
然后用一个新数组存两段每一个元素较小的一个,
最后再把没存完的一段用循环存在新数组的后面,注意:循环条件不是i!=mid,而是i<=mid,因为i可能大于mid
然后用一个循环把排好的原始一一对应赋值给新的序列(因为每一次的递归都是用第一个数组来排序并赋值给第二组的)
归并排序实现的c代码
void gsort(int a,int b)
{
if(a==b)return;
int i=a,k=a,mid=(a+b)/2,j=mid+1;
gsort(a,mid);gsort(j,b);
while(i<=mid&&j<=b){
if(m[i]<=m[j])
n[k++]=m[i++];
else{
n[k++]=m[j++];
}
}
while(i<=mid)
n[k++]=m[i++];
while(j<=b)
n[k++]=m[j++];
for(int x=a;x<=b;x++)
m[x]=n[x];
}