五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

關(guān)于c++中的sort有些時候不然C語言的qsort這件事

2023-03-11 20:25 作者:呼喚伙伴的小金魚  | 我要投稿

眾所周知,c++中有stl庫中自帶的sort函數(shù),進(jìn)一步說,還有stable_sort來增加穩(wěn)定性

但是,別忘了,在c庫<stdlib.h>庫中,還有一個按位排序的qsort算法,類似于

qsort(目標(biāo)數(shù)組名,排序元素個數(shù),排序元素單個的大小,排序函數(shù)(入?yún)⒕鶠閏onst void*,返回值為int類型,不能像c++這樣隨意))

但是——它都標(biāo)明了q(quick)了,和c++sort相比會如何呢?是遜色很多,還是名副其實?

實驗如下:(int為例)

#include<iostream>

#include<random>

#include<algorithm>

#include<time.h>

#define arrlen(ar) (sizeof(ar)/sizeof((ar)[0]))

#define arrmove(a,b) memcpy(a,b,sizeof(b))

#include<memory.h>

using namespace std;

#define qsort_cmper(name,type)\

int name(const void *a,const void *b)\

{if(*(type*)a<*(type*)b)return -1;\

if(*(type*)b<*(type*)a)return 1;\

return 0;}//關(guān)于qsortcmp的通用寫法?

qsort_cmper(ccmp,int)

#define N 10000000//10^7級?

random_device ram;

uniform_int_distribution<int>kg(-1000000,1000000);

//為了避免rand這個偽隨機(jī)數(shù)垃圾重復(fù)出數(shù)字?

int a[N],s[N];

int main(){

for(int i=0;i<arrlen(a);++i)a[i]=kg(ram);

arrmove(s,a);

clock_t e=clock(),b;

sort(s,s+N);

b=clock();

printf("%lld\n",b-e);

arrmove(s,a);

e=clock();

stable_sort(s,s+N);

b=clock();

printf("%lld\n",b-e);

arrmove(s,a);

e=clock();

qsort(s,N,4,ccmp);

b=clock();

printf("%lld\n",b-e);

}

結(jié)果是這樣的

Sort:3586

Stable_sort:3725

Qsort:3120

但在10^5的條件下:

Sort:20

Stable_sort:30

Qsort:25

所以說,Qsort的絕對優(yōu)勢實在數(shù)據(jù)量很多(如10^6的狀態(tài)下),但Sort更方便。

你看這個Stable_sort就是遜也~

qsort還有一個sort不可達(dá)到的方式,那就是對于靜態(tài)多維數(shù)組(二維數(shù)組)排序。

學(xué)過c++的都知道,數(shù)組作為c++的特色,不能直接用=賦值,傳達(dá)參數(shù)也得用指向數(shù)組的指針,賊麻煩,而sort不僅用類安全加大了麻煩,而且賦值操作還直接拒中括號靜態(tài)數(shù)組魚門外

而qsort就不同了,void*傳遞避免類型問題(“類型不安全”),交換按位交換,省去等號煩惱,而傳遞的比較參數(shù)稍加類型轉(zhuǎn)換就能在數(shù)組上操作,只需要寫好單個元素的大小和比較函數(shù)就比c++不知好上太多(雖然c++有vector)

就拿c風(fēng)格字符串來說吧:

#include<iostream>

#include<string.h>

#include<stdlib.h>

#include<algorithm>?

using namespace std;

char a[21][100]={"I love your mother fucker","The car I just bought","I fuck your mum","Fuck You!","The car is still new!","Fuck you mother","Your Mother Fucker the car I just bought"};

int main(){

qsort(a,7,100,(int (*)(const void*,const void*))strcmp);//沒錯,強行拉上strcmp

for(int i=0;i<7;i++)cout<<a[i]<<'\n';

}?

So~在數(shù)據(jù)過大時排序與排序c風(fēng)格二維數(shù)組時,sort不如qsort

如果喜歡的話,就關(guān)注小金魚我吧~

CSDN賬號正在注冊,名字叫“呼喚伙伴的小金魚”


關(guān)于c++中的sort有些時候不然C語言的qsort這件事的評論 (共 條)

分享到微博請遵守國家法律
翼城县| 彭阳县| 湖南省| 莫力| 秦皇岛市| 正定县| 朝阳区| 台北县| 丰宁| 小金县| 隆德县| 胶州市| 长泰县| 原阳县| 沛县| 扬州市| 桐城市| 奉新县| 花垣县| 黑河市| 泗洪县| 吴江市| 平顶山市| 扶绥县| 绥化市| 中阳县| 吴旗县| 韶山市| 信宜市| 铁岭县| 涪陵区| 阜平县| 宜阳县| 扶风县| 洮南市| 大田县| 廊坊市| 余江县| 芮城县| 邹平县| 昆明市|