#include<iostream>
#include<time.h>
#include<stdlib.h>
#define max 8001
using namespace std;
typedef int elemtype;//用typedef 声明一个新的类型名以代替已有的类型,便于适应多种数据类型
int partition(elemtype A[],int p,int r);
void quicksort(elemtype A[],int p,int r)
{ int q;
if (p<r)
{
q=partition(A,p,r);//divide分解过程,quicksort的关键部分
//分解:数组A[p,r]被分成两个可能的数组A[p,q-1],A[q+1,r],是的前者中的数据元素都小于A[q],后者A[q+1,r]中的数据元素都小于A[q]
//是一个相对有序的数组
quicksort(A,p,q-1);//conquer(解决):通过递归调用快速排序,对于数组A[p.q-1]和A[q+1,r]排序
quicksort(A,q+1,r);
//combine(合并)因为数组是原地排序的,合并不需要操作
}
}
int partition(elemtype A[],int p,int r)//快速排序的关键
{
elemtype x=A[r];//把主元(pivot element)保存在x
elemtype temp;//暂存变量
int j;
int i=p-1;//为了后续的标号能对上,只是一个技巧,i代表小于A[q]的最后一个数在A中的位置
for(j=p;j<=r-1;j++)
{
if(A[j]<=x)//小于等于数轴元素才进行i加1,并且交换当前A[j]与大于数轴元素的第一个数据A[++i]
{
temp=A[++i];
A[i]=A[j];
A[j]=temp;
}
}
i++;
temp=A[r]; //把数轴元素与大于数轴元素的第一个数进行交换
A[r]=A[i];
A[i]=temp;
return i;
}
int main(void)
{ int i,j;
int p=0;
elemtype A[max];//在初始化数组时可以不指明数组的长度
srand((int)time(0));
A[0]=rand()%8000+1;
for(i=1;i<max;i++)
{
A[i]=rand()%8000+1;
for(j=0;j<i;j++)
{
if(A[i]==A[j])
i--;
}
}
int length = sizeof(A) / sizeof(int);//采用次公式计算数组的长度!!!实用!
int r=length-1;
quicksort(A,p,r);//初始时是对(A,P=0,r=length-1)
for(i=0;i<length;i++)
cout<<A[i]<<endl;
return 1;
}
这是一个快排的程序,程序是没有什么问题,只是在define宏定义时,若max小于等于8000则可以正确运行,若大于8000,则程序编译什么的窦娥米有问题,只是在运行时就没有任何动静了,就是无结果显示,这是为什么呢,望大侠帮忙解释一下,谢谢了!!!