免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1850 | 回复: 3
打印 上一主题 下一主题

[算法] 快排的一个问题 求指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-18 19:54 |只看该作者 |倒序浏览
本帖最后由 bjutslg 于 2014-08-18 19:55 编辑

自己写的一个快排 有点问题求指教
  1. #include <iostream>
  2. using namespace std;

  3. void Ksort(int *a,int left,int right,int len)
  4. {
  5.         if(len==0)
  6.                 return ;
  7.         int r=right;
  8.         int data=a[left];
  9.         while(left<right)
  10.         {
  11.                 while(a[right]>data&&left<right)
  12.                         right--;
  13.                 if(left<right)
  14.                         a[left++]=a[right];
  15.                 while(a[left]<data&&left<right)
  16.                         left++;
  17.                 if(left<right)
  18.                         a[right--]=a[left];
  19.         }
  20.         a[left]=data;

  21.         Ksort(a,0,left-1,left-0);         
  22.         Ksort(a,left+1,r,r-left);
  23. //        Ksort(a,left+1,len-1,len-1-left);  //为什么用上面那句就可以,用这个就不行呢 每次快排的右端点下表不就是本次快排的长度减一么??
  24. }
  25. void Pnum(int *a,int len)
  26. {
  27.         int i=0;
  28.         for(i;i<len;i++)
  29.                 cout<<a[i]<<" ";
  30.         cout<<endl;
  31. }
  32. int main()
  33. {
  34.         int a[]={5,9,3,2};
  35.         Pnum(a,4);
  36.         Ksort(a,0,3,4);
  37.         Pnum(a,4);
  38.         return 0;
  39.        
  40. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-08-19 10:16 |只看该作者
本帖最后由 dooqaqa 于 2014-08-19 10:19 编辑

传len这个变量的话,递归的每一级右边界只减1,而不是减去查找的个数

编辑错误回答

论坛徽章:
0
3 [报告]
发表于 2014-08-19 15:09 |只看该作者
还是不是很明白啊,你能说详细点么??回复 2# dooqaqa


   

论坛徽章:
0
4 [报告]
发表于 2014-08-19 15:15 |只看该作者
哦哦 明白了 想通了回复 2# dooqaqa


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP