CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

快速排序的递归算法问题?

楼主xiaott(我能睡觉吗)2002-08-26 18:28:57 在 C/C++ / C语言 提问

小弟最近学数据结构学到了快速排序,在上机试验时,在给出的两个排序函数下,却始终写不对主函数,望各位大虾指点迷津,最好能够给出主函数原码!!函数如下:  
   
   
   
  #include<stdio.h>  
   
  void   quickpass(int   r[6],int   h,int   p,int   i)  
  {  
  int   j,x;  
  i=h;j=p;x=r[i];/*置初值*/  
  while(i<j)  
  {  
  while((r[j]>=x)&&(i<j))  
  j--;   /*自尾端进行比较*/  
  if(i<j)  
  {  
  r[i]=r[j];i++;/*将r[j]<x的记录移至i所指位置*/  
  while((r[i]<=x)&&(i<j);  
  i++;/*自首端进行比较*/  
  if(i<j)  
  {  
  r[j]=r[i];j--;/*r[i]>x的记录移到j所指位置*/  
  }  
  }  
  }  
  r[i]=x;/*将X移到正确位置*/  
  }  
   
  void   quicksort(int   r[6],int   s,int   t)/*用递归算法进行快速排序*/  
  {  
  if(s<t)  
  {  
  quickpass(r,s,t,i);  
  quicksort(r,s,i-1);  
  quicksort(r,i+1,t);  
  }  
  }  
   
  void   main()  
  {        
  /*如何调用递归函数quicksort*/  
  }  
   
  问题点数:50、回复次数:4Top

1 楼ylbug(臭虫)回复于 2002-08-26 18:37:55 得分 0

quicksort函数中,i是什么东东?Top

2 楼lizhongkun(泛型)回复于 2002-08-26 19:06:14 得分 25

#include<stdio.h>  
   
  void   quickpass(int   r[],int   low,int   h)  
  {  
  r[0]=r[low];  
  pivotkey=r[low].key;/*置初值*/  
  while(i<j)  
  {  
  while(low<h&&r[h].key>=pivotkey)  
  h--;   /*自尾端进行比较*/  
                                    r[low++]=r[h];  
  while(low<h&&r[low].key<=pivotkey)  
  ++low;  
  r[h--]=r[low];  
  }  
                            r[low]=r[0];  
  returnlow;  
  }    
   
  void   quicksort(int   r[],int   s,int   t)/*用递归算法进行快速排序*/  
  {  
  if(s<t-1)  
  {  
  pivot=quickpass(r,s,t,i);  
  quicksort(r,s,   pivot-1);  
  quicksort(r,   pivot+1,t);  
  }  
  }  
   
  void   main()  
  {       int^^^^^^;  
  ~~~~~~~~~~~~~~  
            /*如何调用递归函数quicksort*/  
            void   quicksort(   int   b[],low,high);      
  }  
   
   
  Top

3 楼wu4long()回复于 2002-08-26 19:22:14 得分 25

#include<stdio.h>  
   
  //这里我设成quickpass()的返回值为INT,因为我猜你的意思是返回当前快速插入最后的位置,如果用int   i作为函数的参数,则这是传值,而不会改变外面的值。说的清楚一点,函数参数传入到函数中时,做了一个拷贝,而外面的int   i没有调用。所以为了达到你的目的,我让其返回一个int   值,当然还有方法是传入int   *i。  
   
  int     quickpass(int   r[6],int   h,int   p)  
  {  
  int   j,x,i;  
  i=h;j=p;x=r[i];/*置初值*/  
  while(i<j)  
  {  
  while((r[j]>=x)&&(i<j))  
  j--;   /*自尾端进行比较*/  
  if(i<j)  
  {  
  r[i]=r[j];i++;/*将r[j]<x的记录移至i所指位置*/  
  while((r[i]<=x)&&(i<j))  
  i++;/*自首端进行比较*/  
  if(i<j)  
  {  
  r[j]=r[i];j--;/*r[i]>x的记录移到j所指位置*/  
  }  
  }  
  }  
  r[i]=x;/*将X移到正确位置*/  
  return   i;  
  }  
   
  void   quicksort(int   r[6],int   s,int   t)/*用递归算法进行快速排序*/  
  {  
  int   i=0;  
  if(s<t)  
  {  
  i=quickpass(r,s,t);  
  quicksort(r,s,i-1);  
  quicksort(r,i+1,t);  
  }  
  }  
   
  void   main()  
  {        
  /*如何调用递归函数quicksort*/  
          int   r[6]={1,90,23,43,34,44};  
  int   i=0;  
  quicksort(r,0,5);  
  for(i=0;i<6;i++)  
  printf("%d\t",r[i]);  
   
  }  
   
   
  Top

4 楼visiond(vision)回复于 2002-09-15 17:48:27 得分 0

C++Primer上的SAMPLE  
   
  #ifndef   ALGO_C  
  #define   ALGO_C  
   
  template   <class   Type>  
                  Type   min(   Type   a,   Type   b   )   {  
                                  return   a   <   b   ?   a   :   b;  
  }  
   
  template   <class   elemType>  
                  void   swap(   Array<elemType>   &array,   int   i,   int   j   )  
  {  
                  elemType   tmp   =   array[   i   ];  
                  array[   i   ]   =   array[   j   ];  
                  array[   j   ]   =   tmp;  
  }  
   
  template   <class   elemType>  
                  void   sort(   Array<elemType>   &array,   int   low,   int   high   )   {  
                  if   (   low   <   high   )   {  
                                  int   lo   =   low;  
                                  int   hi   =   high   +   1;  
                                  elemType   elem   =   array[lo];  
   
                                  for   (;;)   {  
                                                  while   (   min(   array[++lo],   elem   )   !=   elem   &&   lo   <   high   )   ;  
                                                  while   (   min(   array[--hi],   elem   )   ==   elem   &&   hi   >   low   )   ;  
   
                                                  if   (lo   <   hi)  
                                                                  swap(   array,   lo,   hi   );  
                                                  else   break;  
                                  }  
   
                                  swap(   array,   low,   hi   );  
                                  sort(   array,   low,   hi-1   );  
                                  sort(   array,   hi+1,   high   );  
                  }  
  }  
   
  template   <class   elemType>  
                  void   display(   Array<elemType>   &array   )  
  {   //   display   format:   <   0   1   2   3   4   5   >  
   
                  cout   <<   "<   ";  
                  for   (   int   ix   =   0;   ix   <   array.size();   ++ix   )  
                                  cout   <<   array[ix]   <<   "   ";  
                  cout   <<   ">\n";  
  }  
   
  #endif  
  Top

相关问题

  • 求取快速排序的非递归算法(最好能给出C/C++的源代码)
  • 二叉排序树判定的非递归算法
  • 快速排序的非递归实现
  • 请教快速排序的非递归化
  • 帮忙把快速排序改为非递归形式
  • 快速排序算法,急用在线!!!
  • 如何优化快速排序算法
  • 求delphi中几个基本的排序算法、递归以及迭代算法还有查询算法的列子————在线等待!!!!!
  • 求一递归算法?
  • 递归算法请教

关键词

  • 函数
  • 算法
  • 排序
  • 递归算法
  • quickpass
  • array
  • low
  • 快速排序
  • 置初值
  • 值

得分解答快速导航

  • 帖主:xiaott
  • lizhongkun
  • wu4long

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo