C/C++ 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个数,程序也会直接崩溃,因为这不是严格弱序。

参考https://blog.csdn.net/nameofcsdn/article/details/104828188

(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章