主题:請看看我這QuickSort為什麼出錯...
為什麼這個代碼會出錯呢???
把 N 改小了就沒問題,改大了就出問題
我在VS2008上運行的...
[code]
#include <iostream>
#include <time.h>
#define N 1000000
using namespace std;
int Partition(int a[],int p,int q)
{
int t,i,j=p,x=a[q];
for (i=p;i<q;i++)
{
if (a[i]<x)
{
t=a[j];
a[j]=a[i];
a[i]=t;
j++;
}
}
t=a[q];
a[q]=a[j];
a[j]=t;
return j;
}
void QS(int a[],int p,int q)
{
if(p<q)
{
int x=Partition(a,p,q);
QS(a,p,x-1);
QS(a,x+1,q);
}
}
void QuickSort(int a[],int n)
{
QS(a,0,n-1);
}
int main()
{
int a[N],i;
srand(time(0));
for (i=0;i<N;i++)
{
a[i]=rand()%N;
}
QuickSort(a,N);
for (i=0;i<N-1;i++)
{
if (a[i]>a[i+1])
{
cout<<"error"<<endl;
}
}
return 0;
}
[/code]
把 N 改小了就沒問題,改大了就出問題
我在VS2008上運行的...
[code]
#include <iostream>
#include <time.h>
#define N 1000000
using namespace std;
int Partition(int a[],int p,int q)
{
int t,i,j=p,x=a[q];
for (i=p;i<q;i++)
{
if (a[i]<x)
{
t=a[j];
a[j]=a[i];
a[i]=t;
j++;
}
}
t=a[q];
a[q]=a[j];
a[j]=t;
return j;
}
void QS(int a[],int p,int q)
{
if(p<q)
{
int x=Partition(a,p,q);
QS(a,p,x-1);
QS(a,x+1,q);
}
}
void QuickSort(int a[],int n)
{
QS(a,0,n-1);
}
int main()
{
int a[N],i;
srand(time(0));
for (i=0;i<N;i++)
{
a[i]=rand()%N;
}
QuickSort(a,N);
for (i=0;i<N-1;i++)
{
if (a[i]>a[i+1])
{
cout<<"error"<<endl;
}
}
return 0;
}
[/code]