int d[100] = {0};
int s[10] = {32, 21, 67, 11, 5, 43, 99, 18, 22, 87};
void merg(int left,int right){
int mid=(left+right)/2;
int i=left,j=mid+1,k=0;
while(i<=mid&&j<=right)
{
if(s[i]<s[j])
{
d[k++]=s[i++];
}
else
{
d[k++]=s[j++];
}
}
while(i<=mid)d[k++]=s[i++];
while(j<=right)d[k++]=s[j++];
for(i=left,k=0;i<=right;i++,k++)s[i]=d[k];
}
void mergesort(int left,int right){
if(left<right){
int mid=(left+right)/2;
mergesort(left,mid);
mergesort(mid+1,right);
merg(left,right);
}
}
int main()
{
mergesort(0,9);
for(int i = 0; i < 10; i++)
{
cout << s[i] << endl;
}
return 0;
}
分+治+合之典范
注意,算法的时候,可以申请一些全局的大数组。
但是如果做工程,外面自己先声明下 然后再把这个数组指针传进函数里