想用函数递归实现分割法排序,首先对于数组的第一个元素,求出它在最终排序完之后的位置,即将大于它全排在它的右边,小于它的排在左边。再对被他分割而成的两个小数组实行相同操作,但总觉得递归用得有问题但又找不出在哪儿?请大家指教
#include <stdio.h>
void Quicksort(int *num,int startpos,int endpos)
{
do
{
int i,temp,mid;
int start=startpos;
int end=endpos;
while(start!=end)
{
for(i=end;i>=start;i–)
{
if(num[start]>=num[i])
{
end=i;
temp=num[start];
num[start]=num[i];
num[i]=temp;
break;
}
}
for(i=start;i<=end;i++)
{
if(num[i]>=num[end])
{
start=i;
temp=num[end];
num[end]=num[i];
num[i]=temp;
break;
}
}
mid=start;
Quicksort(num,startpos,mid-1);
Quicksort(num+start+1,mid+1,endpos);
}
}while(startpos>endpos);
}
main(void)
{
int num[10]={12,32,43,56,76,23,44,64,30,28};
int i;
for(i=0;i<10;i++)
printf(“%4d”,num[i]);
printf(“\n”);
Quicksort(num,0,9);
for(i=0;i<10;i++)
printf(“%d”,num[i]);
}
>> 本文固定链接: http://www.vcgood.com/archives/2742