快速排序法的逻辑错误[己解决]谢谢大家帮助

Home Home
引用 | 编辑 minieudaemon
2008-11-20 21:46
楼主
推文 x0
各位大大
小弟看完书看想自己照着演算法依样画葫芦...但是
错出现逻辑错误...麻烦各位大大帮忙指正...并教导
小弟一下...因为今天晚上都在想这个问题...

先谢谢楼下大大....不过小弟刚刚照您的code去compiler
跟我原本的情况一样...就是compiler有过...但却无法跑出
排序后的结果....

// 快速排序法
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;
void Qsort(int *,int,int);   //函数原型,传入 阵列,起点,终点
void showdata(int *,int);     //印出阵列的值
int main()
{
  srand(time(NULL));
  cout << "请输入阵列大小:&quo ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 teldeanmac85
2008-11-21 09:18
1楼
  
复制程式
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;

void Qsort(int *,int,int,int);   //函数原型,传入 阵列,起点,终点 
void showdata(int *,int);     //印出阵列的值

int main(int argc, char* argv[])
{
       srand(time(NULL));
    cout << "请输入阵列大小:";
    int size ;
    cin >> size;
    int *data = new int [size];
    
       for(int i=0;i<size;i++)
       data[i]=rand()%99+1;           //将阵列设值 1~100内
    showdata(data,size);

    cout << "排序后..."<<endl;
       Qsort(data,0,size-1,size);
       showdata(data,size);

    delete [] data;
  
    system("pause");
    return 0;
}
void showdata(int *d,int size)
{
    for(int i=0;i<size;i++)
              cout<< setw(2)<< d[i] << " ";
    cout<<endl;
    return;
}

void Qsort(int *data,int left,int right,int MAX)
{
    int temp = 0;
    int i,j,k;
    if(left < right){
              k=data[left];
              i=left;
              j=right+1;
              while(1){
                     while(i+1<MAX && k>data[++i]) ;        // i 由左向右找

                     while(j-1>-1 && k<data[--j]);           //j 由右向左找
        
                     if(i>=j) break;
            
                     //两数交换
                     temp=data[i];
                     data[i]=data[j];
                     data[j]=temp;
              }//end while

              data[left] = data[j]; 
              data[j] = k; 

              Qsort(data,left,j-1,MAX);                 //递回呼叫
              Qsort(data,j+1,right,MAX);
       } //end if
}  


献花 x1
引用 | 编辑 minieudaemon
2008-11-21 15:18
2楼
  
先谢谢大大....不过小弟刚刚照您的code去compiler跟
我原本的情况一样...就是compiler有过...但却无法跑出
排序后的结果....^^


我是用 dev c++ 5 beta 8 release (4.9.8.0)

献花 x0
引用 | 编辑 WindinCloud
2008-11-21 20:27
3楼
  
下面是引用minieudaemon于2008-11-21 15:18(2楼)发表的 :
先谢谢大大....不过小弟刚刚照您的code去compiler跟
我原本的情况一样...就是compiler有过...但却无法跑出
排序后的结果....^^
你要不要说说你编译的环境
我有测试过他的程式是OK的唷~

./quick.exe
请输入阵列大小:5
66  1 54 30  8
排序后...
 1  8 30 54 66

献花 x0
引用 | 编辑 minieudaemon
2008-11-21 20:46
4楼
  
嗯...我刚刚再复制跑了一次...真的有排出来了....
不过我用的是同一个compiler...现在有排出来了...
我下午一样复制...却没有成功... 表情

谢谢楼上两位大大...我要好好去研究一下两者
的差别了... 表情 ...看看自己那里出了问题...

献花 x0
引用 | 编辑 teldeanmac85
2008-11-21 21:09
5楼
  
请问你的Error Message是什么?
我的环境是VC 6.0

int main(int argc, char* argv[])   // 改成int main(void)

试看看 我记得dev c++ 好像compile不会过~ 表情

献花 x0