最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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這件事的評論 (共 條)

分享到微博請遵守國家法律
镇康县| 东海县| 咸阳市| 四川省| 噶尔县| 沅江市| 交口县| 开阳县| 肥城市| 利辛县| 肃宁县| 铁力市| 华坪县| 扶绥县| 洪洞县| 江西省| 万山特区| 无为县| 丹寨县| 昆山市| 雅江县| 秀山| 宁海县| 普兰店市| 连山| 通河县| 中方县| 修文县| 沂水县| 贵阳市| 南昌县| 图木舒克市| 涞源县| 佛教| 澄江县| 龙山县| 广西| 乌拉特中旗| 张家界市| 临邑县| 隆林|