标题:这个程序错在那里呢?怎么运行之后没有对数组进行排序?
只看楼主
UCU月祭
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2012-11-6
结帖率:50%
 问题点数:0 回复次数:9 
这个程序错在那里呢?怎么运行之后没有对数组进行排序?
#include <iostream>
#include <ctime>
using namespace std;
class kuaisu
{
public:
    void paixu(int p[],int left,int right);
    void getit(int p[])
    {
        for(int i=0;i<10;i++)
            cout<<p[i]<<'\t';
    }
    void fuzhi(int p[]);
    ~kuaisu()
    {
        cout<<"释放完成:"<<endl;
    }
private:
    int p[10];
};
void kuaisu::fuzhi(int p[])
{
    srand(time(0));
    for(int i=0;i<10;i++)
        p[i]=rand()%6775;
}
void kuaisu::paixu(int p[],int left,int right)
{
    int l,r,pivot,temp;
    l=left;r=right;
    pivot=p[(l+r/2)];
    while(r>l)
    {
        if(l<pivot)
            l++;
        if(r>pivot)
            r--;
        if(l>=r)
            break;
    }
    temp=p[l];
    p[l]=p[r];
    p[r]=temp;
    l++;r--;
    if(r>left)
        paixu(p,left,r);
    if(l<right)
        paixu(p,l,right);
}
int maia()
{
    int vn[10];
    kuaisu D;
    D.fuzhi(vn);
    cout<<"排序前:"<<endl;
    D.getit(vn);
    cout<<"排序后:"<<endl;
    D.paixu(vn,0,9);
    D.getit(vn);
    return 0;
}

搜索更多相关主题的帖子: private void include public 
2012-12-15 19:59
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:0 
int maia()
小错误害死人,
学会查错误信息!

www.qunxingw.wang
2012-12-15 22:14
UCU月祭
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2012-11-6
得分:0 
回复 2楼 qunxingw
我把那个地方改了,还是一样。。
2012-12-15 22:35
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:0 
void kuaisu::paixu(int p[],int left,int right)
{
    int l,r,pivot,temp;
    l=left;r=right;
    pivot=p[(l+r/2)];
    while(r>l)
    {
        if(l<pivot)
            l++;
        if(r>pivot)
            r--;
        if(l>=r)
            break;
    }
    temp=p[l];
    p[l]=p[r];
    p[r]=temp;
    l++;r--;
    if(r>left)
        paixu(p,left,r);
    if(l<right)
        paixu(p,l,right);
}
麻烦楼主对此函数的变量及思想说明下,主要是pivot=p[(l+r/2)];
 谢谢

www.qunxingw.wang
2012-12-15 22:37
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:0 
#include <iostream>
#include <ctime>
using namespace std;
class kuaisu
{
public:
    void paixu(int p[],int left,int right);
    void getit(int p[])
    {
        for(int i=0;i<10;i++)
            cout<<p[i]<<'\t';
    }
    void fuzhi(int p[]);
    ~kuaisu()
    {
        cout<<"释放完成:"<<endl;
    }
private:
    int p[10];
};
void kuaisu::fuzhi(int p[])
{
    srand(time(0));
    for(int i=0;i<10;i++)
        p[i]=rand()%6775;
}


void kuaisu:: paixu(int p[],int left,int right)
{
    int i,j,temp;
    i=left;
    j=right;
    temp=p[left];
    if(left>right)
       return;
   while(i!=j)
   {
       while(p[j]>=temp && j>i)
          j--;
       if(j>i)
          p[i++]=p[j];
 
       while(p[i]<=temp && j>i)
           i++;
       if(j>i)
           p[j--]=p[i];
    }
    p[i]=temp;
   paixu(p,left,i-1);
   paixu(p,i+1,right);
 }

int main()
{
    int vn[10];
    kuaisu D;
    D.fuzhi(vn);
    cout<<"排序前:"<<endl;
    D.getit(vn);
    cout<<"排序后:"<<endl;
    D.paixu(vn,0,9);

    D.getit(vn);
    return 0;
}



[ 本帖最后由 qunxingw 于 2012-12-16 13:45 编辑 ]
收到的鲜花
  • UCU月祭2012-12-18 13:56 送鲜花  3朵   附言:好文章

www.qunxingw.wang
2012-12-15 22:39
琐碎的心99
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-12-16
得分:0 
你下载一个软件运行就知道哪里错了。
2012-12-16 10:06
UCU月祭
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2012-11-6
得分:0 
回复 4楼 qunxingw
就是对一个数据进行快速排序。以中间那个数为标杆。。。
2012-12-16 16:51
UCU月祭
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2012-11-6
得分:0 
回复 5楼 qunxingw
我看懂你写的程序了 非常感谢!!   但是我那个程序那里有问题呢? 我的意思是将一个数组的元素运用快速排序法进行排序。以中间那个数为标杆。
2012-12-16 18:12
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:0 
楼主以中间为标, 发现的问题有,计算中间数组值有误,从你循环看,仅能交换一次。建议充分理解每一步,最好用图表达。此法及以右为标方法有同,但也稍有差异,真弄懂了左标,其他的也应想法能做出来。

www.qunxingw.wang
2012-12-17 13:08
UCU月祭
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2012-11-6
得分:0 
回复 9楼 qunxingw
嗯嗯。。好吧!! 非常感谢。。
2012-12-17 21:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-391416-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068138 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved