成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用回調(diào)函數(shù)通過(guò)冒泡排序模擬實(shí)現(xiàn)qsort函數(shù)

MasonEast / 1158人閱讀

摘要:如果你把函數(shù)的指針地址作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。

回調(diào)函數(shù)是什么?

回調(diào)函數(shù):
就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址) 作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。

先來(lái)舉個(gè)qsort函數(shù)的使用案例:

qsort()函數(shù):
聲明:

參數(shù):

這里用到qsort函數(shù)實(shí)現(xiàn)對(duì)數(shù)組元素的從小到大排序

#include #include //qosrt函數(shù)的使用者得實(shí)現(xiàn)一個(gè)比較函數(shù)int int_cmp(const void * p1, const void * p2) {  return (*( int *)p1 - *(int *) p2);}int main(){    int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };    int i = 0;        qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);    for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)   {       printf( "%d ", arr[i]);   }    printf("/n");    return 0; }

運(yùn)行結(jié)果如下:

qsort函數(shù)排序運(yùn)用的是快速排序算法
接下來(lái)就要來(lái)實(shí)現(xiàn)一個(gè)與之類似的冒泡排序函數(shù)

具體過(guò)程注意看下列 完整代碼注釋

#include #includestruct Stu{	char name[20];	int age;};//比較結(jié)構(gòu)體年齡int cmp_by_age(const void* e1, const void* e2){	return ((struct Stu*)e1)->age -((struct Stu*)e2)->age;}//比較結(jié)構(gòu)體姓名int cmp_by_name(const void*e1, const void*e2){	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);}//比較整型數(shù)int cmp_int(const void* e1, const void*e2){	return *(int*)e1 - *(int*)e2;}//打印函數(shù)void print_arr(int arr[], int sz){	int i = 0;	for (i = 0; i < sz; i++)	{		printf("%d ", arr[i]);	}}//交換函數(shù)void Swap(char* buf1, char* buf2, int width){	int i = 0;	for (i = 0; i < width; i++)	{		char tmp = *buf1;		*buf1 = *buf2;		*buf2 = tmp;		buf1++;		buf2++;	}}//使用回調(diào)函數(shù)實(shí)現(xiàn)一個(gè)通用冒泡排序void BubbleSort(void* base, size_t num, size_t width, int (*cmp)(const void*, const void*)){	size_t i = 0;	//趟數(shù)	for (i = 0; i < num - 1; i++)	{		//比較的對(duì)數(shù)		size_t j = 0;		for (j = 0; j < num - 1 - i; j++)		{			//base[j] ==> *(base+j)			if (cmp((char*)base+j*width, (char*)base+(j+1)*width)>0)			{				//交換				Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);			}		}	}}//整型數(shù)組排序測(cè)試void test1(){	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };	int sz = sizeof(arr) / sizeof(arr[0]);	BubbleSort(arr, sz, sizeof(arr[0]), cmp_int);	//打印	print_arr(arr, sz);}//結(jié)構(gòu)體排序測(cè)試void test2(){	struct Stu s[3] = { {"zhangsan", 15}, {"lisi", 30},{"wangwu", 10} };	int sz = sizeof(s) / sizeof(s[0]);	//按照名字排序	BubbleSort(s, sz, sizeof(s[0]), cmp_by_name);		//按照年齡來(lái)排序	BubbleSort(s, sz, sizeof(s[0]), cmp_by_age);}int main(){		//測(cè)試自定義的BubbleSort()排序整型數(shù)組	test1();	//測(cè)試自定義的BubbleSort()排序結(jié)構(gòu)體	test2();	return 0;}

這個(gè)冒泡排序函數(shù)是一個(gè)通用函數(shù),不光可以對(duì)整型數(shù)組進(jìn)行排序,也可以對(duì)結(jié)構(gòu)體數(shù)據(jù)進(jìn)行排序,需要變化的就只是比較函數(shù)而已

運(yùn)行結(jié)果如下:
整型數(shù)組排序:

結(jié)構(gòu)體數(shù)據(jù)按名字排序:

結(jié)構(gòu)體數(shù)據(jù)按年齡排序:

本文僅僅記錄學(xué)習(xí)過(guò)程,還望各位大佬多多指出不足~

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119012.html

相關(guān)文章

  • 指針學(xué)習(xí)進(jìn)階

    摘要:讓我們來(lái)看一下代碼,首先我們還是冒泡排序一樣,進(jìn)行了兩次循環(huán),第一次代表排序趟數(shù),第二次代表每趟的排序次數(shù)。這塊的詳細(xì)介紹在本篇文章稍前的冒泡排序中也有詳細(xì)介紹。 ...

    oysun 評(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
  • 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

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

0條評(píng)論

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