回 帖 发 新 帖 刷新版面

主题:[原创]看一下我编写的快速排序源程序,绝对原创啊!

#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h> 

#define N 1000

int array[N+1];

void interchange(int &x,int &y);
int partition(int m,int p);
void quicksort(int p,int q);

void interchange(int &x,int &y)
{
    int elem;
    elem=y;
    y=x;
    x=elem;
}

int partition(int m,int p)
{
    int i,v;
    v=array[m];
    i=m;
    do{
        do{
            i=i+1;
        }while(array[i]<v);

        do{
            p=p-1;
        }while(array[p]>v);

        if(i>=p)  // if ">=" has been change to ">" ,this program is  
            break;
        else interchange(array[i],array[p]);//exit(0);
        }while(1);

    array[m]=array[p];

    array[p]=v;
    return p;
}
void quicksort(int p,int q)
{   
    if(p<q)
    {
        int j;    
        j=q+1;
        j=partition(p,j);

        quicksort(p,j-1);

        quicksort(j+1,q);
    }
}

void main(void)
{
    int n=N;
    int i;
    time_t start,finish;
    ofstream Table;
    for(i=0;i<n;i++)
        array[i]=(int)((rand()/32768.0)*(100000000));
         array[n]=99999999;
    cout<<"排序前:"<<endl;
    for(i=0;i<n;i++)
         {
             cout.fill('0');
             Table.fill('0');
                cout<<setw(8)<<array[i]<<" ";
                Table<<setw(8)<<array[i]<<" ";
           if((i+11)%10==0)
            cout<<endl;
        }

    //cout<<endl;
    time(&start);
     cout<<endl<<"排序前时间为:"<<start<<endl;
    quicksort(0,N-1);
    time(&finish);
    
    Table.open("e:\\result.doc");
    if(!Table.is_open())
              Table<<"open file failed!"<<endl;
    else{
       cout<<"排序后:"<<endl;
         for(i=0;i<n;i++)
         {
             cout.fill('0');
             Table.fill('0');
             cout<<setw(8)<<array[i]<<" ";
             Table<<setw(8)<<array[i]<<" ";
           if((i+11)%10==0)
            cout<<endl;
         }
    cout<<endl<<"排序完毕时间为:"<<finish<<endl;
    cout<<"排序时间为"<<difftime(start,finish)<<endl;
    }
    Table.close();
cout<<endl;

getch();
}

回复列表 (共15个回复)

11 楼

void main()
{
    int array[maxsize],count,i;
    double start,end,finish;
    printf("N");
    printf("       Time(ms)\n");
    srand(time(NULL));
    for(i=0;i<10;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,10);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",10);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<20;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,20);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",20);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<40;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,40);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",40);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<100;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,100);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",100);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<200;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,200);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",200);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<400;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,400);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",400);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<1000;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,1000);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",1000);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<2000;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,2000);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",2000);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<4000;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,4000);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",4000);
    printf("%lf\n",finish/1000);
    //
    srand(time(NULL));
    for(i=0;i<10000;i++)
        array[i]=rand();
    start=(double) clock();
    for(count=0;count<1000;count++)
        SortIntegerArray(array,10000);
    end=(double) clock();
    finish=end-start;
    printf("%d       ",10000);
    printf("%lf\n",finish/1000);

}

    

12 楼

多谢指点!
[em2]

13 楼

好厉害啊

14 楼

好厉害!我为你有勇气拿出来献丑而喝彩!

15 楼

恩,我觉得用c加的亮点是面向对象,你怎么不写一个类,那样更快,还不用自己定义数组,排序本来就快速了,还写面向过程的干什么哦

我来回复

您尚未登录,请登录后再回复。点此登录或注册