快速排序出现问题了

xoX0 2016-02-21 10:38:57

int Median3(int *A,int Left,int Right)
{
int Center=(Left+Right)/2;
if(A[Left]>A[Center])
{
swap(A[Left], A[Center]);
}
if (A[Left] > A[Right])
{
swap(A[Left],A[Right]);
}
if (A[Right] < A[Center])
{
swap(A[Right],A[Center]);
}
swap(A[Center], A[Right-1]);
return A[Center];
}

void QuickSort(int *A,int Left,int Right)
{
if(Left<Right)
{
int Pivot=Median3(A,Left,Right);
int i=Left;
int j=Right-1;
for(;;)
{
while(A[++i]<Pivot)
{
}
while(A[--j]>Pivot)
{
}
if(i<j)
{
swap(A[i],A[j]);
}
else
{
break;
}
}
swap(A[i],A[Right-1]);
QuickSort(A,Left,i-1);
QuickSort(A,i+1,Right);
}
}

void Quick_Sort(int *A,int N)
{
QuickSort(A,0,N-1);
}

快速排序这样写,哪里出现问题了,无正常结果
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-02-22
  • 打赏
  • 举报
回复
if(Left<Right) 和 int Pivot=Median3(A,Left,Right); 不是满和谐的 一般三数取中法。都要更早截止 10~20 个元素的 时候,可以改为插入排序
赵4老师 2016-02-22
  • 打赏
  • 举报
回复
参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\qsort.c
fly_dragon_fly 2016-02-22
  • 打赏
  • 举报
回复
1) swap(A[Center], A[Right-1]); return A[Center]; 比较三个数, 最终返回的是第四个数A[Right-1] 2) 如果privot放在最后, 那么初始i=left-1, j=right

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧