首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

快速排序 的奇怪有关问题

2012-02-29 
快速排序 的奇怪问题就是用自己写的快速排序对数组排序,当只有QuickSort(a,0,bound-1)只排一次的时候,没

快速排序 的奇怪问题
就是用自己写的快速排序对数组排序,当只有QuickSort(a,0,bound-1);只排一次的时候,没任何问题,排2次或以上当数组元素大于8635的时候就不会出结果,小于它正常,主要是我要用clock()来计算算法效率,要对排序循环多次才能出来毫秒数,才发现了这个问题,我同时比较了归并排序、等其他排序算法的效率,只有这个算法出问题,不知道为什么啊。
#include<iostream>
#include<time.h>
using namespace std;

const int bound=8635;//8635就不行了
void QuickSort(int *a,int p,int r);

int main()
{
int a[bound];
srand(time(0));
int j;
for(j=0;j<bound;j++)
{
a[j]=rand()%9999;
}
QuickSort(a,0,bound-1);//////////////////////////////////////
QuickSort(a,0,bound-1);
cout << "Finish!";
return 0;
}

void QuickSort(int *a,int p,int r)///快速排序
{
if(p>=r)
return;
int temp,i,j;
int p1=p;
int r1=r;

do
{
for(i=r1;i>p1;i--)
{
if(a[p1]>a[i])
{
temp=a[p1];
a[p1]=a[i];
a[i]=temp;
break;
}
}
for(j=p1+1;j<i;j++)
{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
break;
}
}
r1=i;
p1=j;
}
while(i>j);

QuickSort(a,p,i-1);
QuickSort(a,i+1,r);
}



[解决办法]
int a[BOUND]; //你这个局部数组太大时造成栈耗尽.

C/C++ code
#include <iostream > #include <time.h > using namespace std; const int BOUND=8635;//8635就不行了 void QuickSort(int *a,int p,int r); int  main() {     int *a=new int[BOUND];     srand(time(0));     int j;     for(j=0;j <BOUND;j++)     {         a[j]=rand()%9999;     }     QuickSort(a,0,BOUND-1);//////////////////////////////////////     QuickSort(a,0,BOUND-1);     cout  << "Finish!";     return 0; } void QuickSort(int *a,int p,int r)///快速排序 {     if(p >=r)         return;     int temp,i,j;     int p1=p;     int r1=r;         do     {         for(i=r1;i >p1;i--)         {             if(a[p1] >a[i])             {                 temp=a[p1];                 a[p1]=a[i];                 a[i]=temp;                 break;             }         }         for(j=p1+1;j <i;j++)         {             if(a[i] <a[j])             {                 temp=a[i];                 a[i]=a[j];                 a[j]=temp;                 break;             }         }         r1=i;         p1=j;     }     while(i >j);         QuickSort(a,p,i-1);     QuickSort(a,i+1,r); }
[解决办法]
看看算法导论上的快速排序吧,很精彩的。
你们写得很 乱。

热点排行