+ -
当前位置:首页 → 问答吧 → 快速排序

快速排序

时间:2011-11-01

来源:互联网

C/C++ code


   int find(int *a,int low,int high)
   {
      int x=a[low];
      while(low<high)
      {
          while(low<high && a[high]>=x)
              --high;
          a[low]=a[high];
          while(low<high && a[low]<=x)
              ++low;
          a[high]=a[low];
      }
   }
   void q_sort(int *a,int low,int high)
   {
      int pos;
      if(low <high)  //把这个去掉 为什么会出现段错误了,,在主程序q_sort(a,0,9) 
                     //这样调用,没low <high 也应该不会错啊,, 去掉low <high
                     //的判断,究竟是哪个地方会出错,,
      {
         pos=find(a,low,high);
         q_sort(a,low,pos-1);
         q_sort(a,pos+1,high);
      }
   }


作者: ligen1123   发布时间: 2011-11-01

去掉这个if后
你这程序就无限递归下去了
另外 find 方法咋没有返回呢

作者: keeya0416   发布时间: 2011-11-01

噢 ,,,find后面少了一点,,,,

递归的条件不是在find里面吗

作者: ligen1123   发布时间: 2011-11-01

嗯 ,,后面少一点,

C/C++ code

int find(int *a,int low,int high)
   {
      int x=a[low];
      while(low<high)
      {
          while(low<high && a[high]>=x)
              --high;
          a[low]=a[high];
          while(low<high && a[low]<=x)
              ++low;
          a[high]=a[low];
      }
       a[low]=x
        return low;
   }
   void q_sort(int *a,int low,int high)
   {
      int pos;
      if(low <high)  //把这个去掉 为什么会出现段错误了,,在主程序q_sort(a,0,9) 
                     //这样调用,没low <high 也应该不会错啊,, 去掉low <high
                     //的判断,究竟是哪个地方会出错,,
      {
         pos=find(a,low,high);
         q_sort(a,low,pos-1);
         q_sort(a,pos+1,high);
      }
   }




作者: ligen1123   发布时间: 2011-11-01

我总感觉不是 无限递归的问题

而是递归时,在Find函数中,,如果找位子到最后一个无素时,Find函数返回

而这个时候 low = high 
出现问题 q_sort(a,pos+1,high); //pos+1 == high
 

作者: ligen1123   发布时间: 2011-11-01

引用 4 楼 ligen1123 的回复:
我总感觉不是 无限递归的问题
而是递归时,在Find函数中,,如果找位子到最后一个无素时,Find函数返回
而这个时候 low = high
出现问题 q_sort(a,pos+1,high); //pos+1 == high


是无限递归下去的
  void q_sort(int *a,int low,int high)
  {
  int pos;
  if(low <high) //把这个去掉 为什么会出现段错误了,,在主程序q_sort(a,0,9) 
  //这样调用,没low <high 也应该不会错啊,, 去掉low <high
  //的判断,究竟是哪个地方会出错,,
  {
  pos=find(a,low,high);
  q_sort(a,low,pos-1);
  q_sort(a,pos+1,high);
  }
  }

相当是
  void q_sort(int *a,int low,int high)
  {
  if(low >= high)
  return;
  int pos;
  pos=find(a,low,high);
  q_sort(a,low,pos-1);
  q_sort(a,pos+1,high);
  }
find里的返回和你q_sort没任何关系
你这里如果没if的话永远是 q_sort 分成2个q_sort子问题如此无限下去
你也可以看看出错信息
应该就是栈溢出了

作者: keeya0416   发布时间: 2011-11-01

热门下载

更多