【发布时间】:2014-05-04 02:48:32
【问题描述】:
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void partition(int a[],int size)
{
int *right,*left,pivot=a[0],temp;
right=&a[size-1];
left=&a[0];
while(1)
{
while(*left<=pivot)
{
left+=1;
}
while(*right>pivot)
{
right-=1;
}
if(right<left)
{
swap(&a[0],right);
break;
}
swap(right,left);
}
}
这段代码对吗?枢轴被放置在正确的位置,但在hackerrank,他们说右边的部分应该按升序排序,而数组的左边部分应该按降序排列。强>
【问题讨论】:
-
这段代码对吗? -- 试试执行?
-
代码看起来不完整。你从左边跑到第一个在错误边的元素,从右边开始,然后交换它们,然后打破循环。所以你只交换一对?如果还有更多呢?还有递归调用丢失。
-
这是分区而不是快速排序的代码,所以我认为不会有任何递归调用。代码运行正确,因为枢轴被放置在正确的位置,但我担心枢轴左右两侧的元素顺序。
标签: c algorithm sorting quicksort