qsort/sort函数性能测试

1,c++ sort函数,比较函数直接return 0或者1

int cmp(int a, int b)
{
    return 1;
}

#define p 2
int ns[p];

int main()
{    
    clock_t start, stop;
    start=clock();
    sort(ns,ns+p,cmp);
    stop=clock();
    cout<<(double)(stop-start);
    return 0;
}

(1)return 1

哪怕p=2,只有2个数,程序也会直接崩溃,因为这不是严格弱序。

参考

(2)return 0

12345 0 123456 4 1234567 42 12345678 401 123456789 4034

排序10^8个数大概需要4秒

2,c语言qsort函数,比较函数直接return 0或者1

int cmp(const void *a, const void *b)
{
    return 0;
}

#define p 12345678
int ns[p];

int main()
{  
    clock_t start, stop;
    start=clock();
    qsort(ns,p,sizeof(int),cmp);
    stop=clock();
    cout<<(double)(stop-start);
    return 0;
}

(1)return 1

12345 375 123456 37047

(2)return 0

12345 0 123456 1 1234567 24 12345678 240 123456789 2413

可以看出,qsort对于非严格弱序虽然可以完成排序,但是非常慢。

3,c++ sort函数,极端全等数组

int cmp(int a, int b)
{
    return a>b;
}

#define p 123456
int ns[p];

int main()
{  
    for(int i=0;i<p;i++)ns[p]=0;
    clock_t start, stop;
    start=clock();
    sort(ns,ns+p,cmp);
    stop=clock();
    cout<<(double)(stop-start);
    return 0;
}

12345 0 123456 6 1234567 42 12345678 412 123456789 4112

4,c语言qsort函数,极端全等数组

int cmp(const void *a, const void *b)
{
    return *(int *)a > *(int *)b;
}

#define p 12345
int ns[p];

int main()
{  
    for(int i=0;i<p;i++)ns[p]=0;
    clock_t start, stop;
    start=clock();
    qsort(ns,p,sizeof(int),cmp);
    stop=clock();
    cout<<(double)(stop-start);
    return 0;
}

12345 0 123456 2 1234567 27 12345678 267 123456789 2697

经验分享 程序员 微信小程序 职场和发展