c++快速排序 不知道是哪里出了问题 ....

sinat_34597822 2016-11-04 11:17:10
#include<iostream>
using namespace std;
void fun(int a[],int low,int high)
{
int i,j,key,change;
i=low;
j=high;
key=a[(low+high)/2];

while(i<j)
{
while(a[i]<=key)
++i;
while(a[j]>key)
--j;
if(i>=j)
break;
if(i<j)
{
change=a[i];
a[i]=a[j];
a[j]=change;
++i;
--j;
}
}
if(i==j)i++;
if(low<i-1)
fun(a,low,i-1);
if(i<high)
fun(a,i,high);

}
int main()
{
int n,a[100000];
cin>>n;
for(int h=0;h<n;h++)
cin>>a[h];

fun(a,0,n-1);
for(int g=0;g<n;g++)
cout<<a[g]<<" ";
return 0;
}
排序中总是有几个数顺序不对
...全文
362 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-11-07
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
呦呦hei 2016-11-05
  • 打赏
  • 举报
回复
你试试把循环里面的a[i]<=key中等于号去掉试试,比方你排序135246,你第一个循环使得i到了2的位置,而j到了4,然后你交换了24并没有使key在中间。所以你先去掉等于在试试

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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