回 帖 发 新 帖 刷新版面

主题:排序有问题 求教!谢谢帮忙

# include <iostream>
# define N 10
double  a[]={2.9,3.7,3.5,2.1,2.7,2.3,3.3,2.5,3.1,3.9};
using namespace std;
class QuickSort
{
    int low,high;
 public:
     QuickSort(int ,int);
     void qkSort();
     int part();
     void prnt();
};
QuickSort::QuickSort(int l,int h)
{
    low=l;
    high=h;
}
int QuickSort::part()
{
    int i,j;
    float p;
    i=low,j=high;
    p=a[low];
    while (i<j)
    {
       while(i<j && a[j]>=p)
       { j--;}
            a[i]=a[j];
       while(i<j && a[i]<=p)
       { i++;}
            a[j]=a[i];
    }
    a[i]=p;
    return(i);
}
void QuickSort::qkSort()
{
    static int i ;
    if(low<high)
    {
        i=part();
        high=i-1;
        qkSort();
        low=i+1;
        qkSort();
    }
    else
        return;
}
void QuickSort::prnt()
{
  cout<<"\n sorted sequence is:\n";
  for(int i=0;i<=N-1;i++)
      cout<<a[i]<<endl;
}

void main()
{
    int m=0,n=N-1;
    QuickSort qs (m,n);
    qs.qkSort();
    qs.prnt();

}


回复列表 (共2个回复)

沙发

你改动了low和high,导致后面递归的时候出问题了,建议还是使用带参数的QSort。如果真的不带参数可以设置两个标签记录high和low,然后再将他们恢复。
[code=c]
void QuickSort::qkSort()
{
    int i;
    int ih, il;
    if(low<high)
    {
        i=part();
        ih = high;
        il = low;

        high=i-1;
        qkSort();
        high = ih;
        
        low=i+1;
        qkSort();
        low = il;
    }
    else
        return;
}
[/code]

板凳

谢谢你 好了 我一步步的调试也发现low+=1有问题  现在好了[em2]

我来回复

您尚未登录,请登录后再回复。点此登录或注册