国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C語(yǔ)言qsort()函數(shù)的使用(詳解)

wangym / 2012人閱讀

摘要:參數(shù)含義上圖是函數(shù)各個(gè)參數(shù)的含義,讓我們一個(gè)個(gè)來(lái)看。使用方式頭文件要使用函數(shù)我們首先需要引用一個(gè)頭文件的實(shí)現(xiàn)函數(shù)給函數(shù)規(guī)定了特定的參數(shù)。因此我們?cè)O(shè)計(jì)函數(shù)時(shí)要嚴(yán)格遵守其參數(shù)設(shè)定。

目錄

1.參數(shù)含義

1.首元素地址base

2.元素個(gè)數(shù)num

3.元素大小size

4.自定義比較函數(shù)compar

2.使用方式

1.頭文件

2.compar的實(shí)現(xiàn)

3.整體代碼


?qsort()函數(shù)(quick sort)是八大排序算法中的快速排序,能夠排序任意數(shù)據(jù)類型的數(shù)組其中包括整形,浮點(diǎn)型,字符串甚至還有自定義的結(jié)構(gòu)體類型。

1.參數(shù)含義

void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));

?上圖是qsort函數(shù)各個(gè)參數(shù)的含義,讓我們一個(gè)個(gè)來(lái)看。

1.首元素地址base

我們要排序一組數(shù)據(jù),首先我們需要找到這組數(shù)據(jù)在哪,因此我們直接將首元素的地址傳給qsort函數(shù)來(lái)確定從哪開始排序。

2.元素個(gè)數(shù)num

我們知道了從哪開始,也要知道在哪結(jié)束才能確定一組需要排序的數(shù)據(jù),但是我們不方便直接將結(jié)尾元素的地址傳入函數(shù),因此我們將需要排序的元素的個(gè)數(shù)傳給qsort函數(shù)來(lái)確定一組數(shù)據(jù)。

3.元素大小size

我們知道qsort函數(shù)能排序任意數(shù)據(jù)類型的一組數(shù)據(jù),因此我們用void*類型的指針來(lái)接收元素,但是我們知道void*類型的指針不能進(jìn)行加減操作,也就無(wú)法移動(dòng),那么在函數(shù)內(nèi)部我們究竟用什么類型的指針來(lái)操作變量呢?我們可以將void*類型的指針強(qiáng)制類型轉(zhuǎn)換成char*類型的指針后來(lái)操作元素,因?yàn)閏har*類型的指針移動(dòng)的單位字節(jié)長(zhǎng)度是1個(gè)字節(jié),我們只需要再知道我們需要操作的數(shù)據(jù)是幾個(gè)字節(jié)就可以操作指針從一個(gè)元素移動(dòng)到下一個(gè)元素,因此我們需要將元素大小傳入qsort函數(shù)。

4.自定義比較函數(shù)compar

我們需要告訴qsort函數(shù)我們希望數(shù)據(jù)按照怎么的方式進(jìn)行比較,比如對(duì)于幾個(gè)字符串,我們可以比較字符串的大小(strcmp),也可以比較字符串的長(zhǎng)度(strlen),因此我們要告訴qsort函數(shù)我們希望的比較方式,我們就需要傳入一個(gè)比較函數(shù)compar就簡(jiǎn)寫為cmp吧。

2.使用方式

1.頭文件

?要使用qsort函數(shù)我們首先需要引用一個(gè)頭文件

#include 

2.compar的實(shí)現(xiàn)

qsort函數(shù)給cmp函數(shù)規(guī)定了特定的參數(shù)。因此我們?cè)O(shè)計(jì)cmp函數(shù)時(shí)要嚴(yán)格遵守其參數(shù)設(shè)定。

int compar (const void* e1, const void* e2);

如果你要比較的數(shù)據(jù)是整形:

int cmp_int(const void* e1, const void* e2){	return *(int*)e1 - *(int*)e2;}

如果你要比較的數(shù)據(jù)是浮點(diǎn)型:

int cmp_float(const void* e1, const void* e2){	return (int)(*(float*)e1 - *(float*)e2);}

如果你要比較的是字符串的大?。?/p>

int cmp_str_size(const void* e1, const void* e2){	return strcmp((char*)e1,(char*)e2);}

如果你要比較的是字符串的長(zhǎng)度:

int cmp_str_len(const void* e1, const void* e2){	return strlen((char*)e1)-strlen((char*)e2);}

如果你要比較的數(shù)據(jù)是結(jié)構(gòu)體變量:

int cmp_by_age(const void*e1, const void*e2){	return (int)(((stu*)e1)->weight - ((stu*)e2)->weight);}

?需要注意的是:返回結(jié)果一定要確保是整形,如果不是一定要強(qiáng)制類型轉(zhuǎn)換成整形!

3.整體代碼

快速排序結(jié)構(gòu)體變量示例:

#include typedef struct stu{	//char name;	int age;	float weight;	double hight;}stu;int cmp_by_age(const void*e1, const void*e2){	return (int)(((stu*)e1)->weight - ((stu*)e2)->weight);}int main(){	stu class1[3] = { {17,185.5,190.8}, {16,160.9,200.7}, {18,120.3,150.5} };	int sz = sizeof(class1) / sizeof(class1[0]);	int i;	qsort(class1, sz,sizeof(class1[0]), cmp_by_age);	for (i = 0; i < 3; i++)	{		printf("%.1f/n", class1[i].weight);	}	return 0;}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/119809.html

相關(guān)文章

  • C語(yǔ)言-qsort函數(shù)詳解

    摘要:目錄一函數(shù)是什么二使用排序以升序?yàn)槔P(guān)于型指針整形數(shù)組排序字符數(shù)組排序字符指針數(shù)組排序結(jié)構(gòu)體數(shù)組排序浮點(diǎn)型數(shù)組排序三使用冒泡排序思想模擬實(shí)現(xiàn)函數(shù)什么是冒泡排序冒泡排序代碼使用冒泡排序思想模 目錄 一.qsort函數(shù)是什么 ?二.使用qsort排序-以升序?yàn)槔?? ? ??關(guān)于void*型指針...

    Airmusic 評(píng)論0 收藏0
  • 怎么樣才能做到對(duì)多種數(shù)據(jù)類型排序?C語(yǔ)言快速排序——qsort函數(shù)及其模擬實(shí)現(xiàn)

    摘要:我們以冒泡排序?yàn)槔M實(shí)現(xiàn)函數(shù)。交換每單位字節(jié)對(duì)于的二進(jìn)制序列這樣,冒泡排序就能排序多種數(shù)據(jù)類型,模擬實(shí)現(xiàn)了函數(shù),當(dāng)然也可以使用其他的排序方法模擬實(shí)現(xiàn)函數(shù)。 ??...

    alphahans 評(píng)論0 收藏0
  • qsort()函數(shù)詳解

    摘要:函數(shù)詳解函數(shù)原型函數(shù)的作用及用法函數(shù)的參數(shù)函數(shù)實(shí)例排序一個(gè)整型數(shù)組排序一個(gè)結(jié)構(gòu)體用冒泡排序模擬一個(gè)函數(shù)函數(shù)原型函數(shù)的作用及用法函數(shù)的功能是對(duì)數(shù)組進(jìn)行排序,數(shù)組有個(gè)元素,每個(gè)元素大小為可以排序數(shù)字,字符,結(jié)構(gòu)體等多種類型 ...

    LiveVideoStack 評(píng)論0 收藏0
  • C語(yǔ)言進(jìn)階:指針進(jìn)階續(xù)

    摘要:故使用無(wú)具體類型,又稱通用類型,即可以接收任意類型的指針,但是無(wú)法進(jìn)行指針運(yùn)算解引用,整數(shù)等。求指針?biāo)甲止?jié)而不是解引用訪問(wèn)權(quán)限大小。數(shù)組就是整個(gè)數(shù)組的大小,數(shù)組元素則是數(shù)組元素的大小,指針大小都為。 ...

    ingood 評(píng)論0 收藏0
  • C語(yǔ)言】指針詳解

    摘要:指針的大小是固定的個(gè)字節(jié)位平臺(tái)位平臺(tái)。二指針數(shù)組指針數(shù)組是一個(gè)存放指針的數(shù)組。是一個(gè)數(shù)組指針,該指針指向的數(shù)組有個(gè)元素,每個(gè)元素都是的。錯(cuò)誤錯(cuò)誤二維數(shù)組首元素指的是第一行。 ...

    wangtdgoodluck 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<