欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C語言庫函數—qsort()詳解-創(chuàng)新互聯

目錄

創(chuàng)新互聯-云計算及IDC服務提供商,涵蓋公有云、IDC機房租用、服務器托管、等保安全、私有云建設等企業(yè)級互聯網基礎服務,服務電話:028-86922220

1. qsort()函數簡介

1.1 函數原型

1.2 函數參數?

2. 比較函數簡介

2. 1 比較函數參數?

2.2 比較函數使用?

3. qsort()函數使用?

3.1 整形數組排序

3.2 字符數組排序

3.3 浮點型數組排序(double類型為例)

3. 4 字符串數組排序?

3.5 結構體?


1. qsort()函數簡介

qsort()函數是C語言庫函數中的一種排序函數,排序方法為快速排序(quick sort)?。

其特點是可以排序任意類型的數組元素。

1.1 函數原型

void qsort(void* base, size_t num, size_t size, int (*comparator)(const void* elem1, const void* elem2));

需引用頭文件:

1.2 函數參數?

qsort()函數需要四個參數

1. void* base:??需排序數組首元素

2. size_t num:?數組元素個數

3. size_t size:?一個數組元素大?。╞yte)

4. int (*comparator) (const void* elem1?, const void* elem2):? 是一個函數指針,其指向的是一個比較函數的地址,該函數有兩個void* 的參數,其返回類型為int 。

void* 類型指針:可以接收任意類型的地址,但不能進行解引用操作和不能對其進行加減整數的操作。

2. 比較函數簡介 2. 1 比較函數參數?

比較函數為自定義函數:其兩個參數為void*類型指針的elem1和elem2 ,返回參數為整形int

參數類型為void*原因:不清楚需比較元素的類型是什么,所以通過void*類型指針的特點(可以接收任意類型的地址)來接收。const修飾其兩個比較參數不可被更改

返回值有三種情況:?

< 0 : elem1 小于 elem2

=?0 : elem1 等于 elem2

>0 : elem1 大于 elem2

2.2 比較函數使用?

如需使用比較函數而void*類型指針不能解引用操作和加減整數操作我們只需對兩個元素進行強制類型轉換為我們想比較元素的類型指針,再進行解引用獲取兩個元素的值,最后進行兩個元素的差值返回。

整型數組

int comp_int(const void* elem1, const void* elem2)
{
	return *(int*)elem1 - *(int*)elem2;
}

字符數組

int comp_char(const void* elem1, const void* elem2)
{
	return *(char*)elem1 - *(char*)elem2;//字符計算是計算ASCLL值
}

浮點型數組

int comp_double(const void* elem1, const void* elem2)
{
	return (int)(*(double*)elem1 - *(double*)elem2);
//浮點型差值為浮點型,而返回值需要為int型,避免報錯將差值強制類型轉換為int型
}

字符串

按首字母排序

int comp_char(const void* elem1, const void* elem2)
{
	return *(char*)elem1 - *(char*)elem2;//字符計算是計算ASCLL值
}

按字符串長度排序

int comp_string(const void* elem1, const void* elem2)
{
	if (strlen(*(char*)elem1) >strlen(*(char*)elem2))
	{
		return 1;
	}
	else if (strlen(*(char*)elem1)< strlen(*(char*)elem2))
	{
		return -1;
	}
	else
	{
		return 0;
	}
}

按正常排序

int comp_string(const void* elem1, const void* elem2)
{
	return strcmp(*(char*)elem1, *(char*)elem2);//strcmp比較兩個字符串大小
}

結構體

struct stu
{
	char name[20];
	int grade;
};

對學生姓名排序

int comp_string(const void* elem1, const void* elem2)
{
	return strcmp(((str*)elem1)->name, ((str*)elem2)->name);
}

對學生成績排序

int comp_string(const void* elem1, const void* elem2)
{
	return strcmp(((str*)elem1)->grade, ((str*)elem2)->grade);
}
3. qsort()函數使用? 3.1 整形數組排序
int cmp_int(const void* elem1, const void* elem2)
{
	return *(int*)elem1 - *(int*)elem2;
}
int main()
{
	int arr[] = { 2,4,6,8,10,1,3,5,9,7 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	for (i = 0; i< sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

3.2 字符數組排序
int cmp_char(const void* elem1, const void* elem2)
{
	return *(char*)elem1 - *(char*)elem2;
}
int main()
{
	char ch[] = {'b','c','a','e','f','d','g'};
	int sz = sizeof(ch) / sizeof(ch[0]);
	int i = 0;
	qsort(ch, sz, sizeof(ch[0]), cmp_char);
	for (i = 0; i< sz; i++)
	{
		printf("%c ", ch[i]);
	}
	return 0;
}

3.3 浮點型數組排序(double類型為例)
int cmp_double(const void* elem1, const void* elem2)
{
	return (int)(*(double*)elem1 - *(double*)elem2);
}
int main()
{
	double arr[] = {2.5,1.0,3.5,4.5,2.0};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	qsort(arr, sz, sizeof(arr[0]), cmp_double);
	for (i = 0; i< sz; i++)
	{
		printf("%f ", arr[i]);
	}
	return 0;
}

3. 4 字符串數組排序?

按字符串首字母排序

int cmp_string(const void* elem1, const void* elem2)
{
	return *(char*)elem1 - *(char*)elem2;
}
int main()
{
	char ch[5][10] = { "black","cat","apple","face","dog" };
	int sz = sizeof(ch) / sizeof(ch[0]);
	int i = 0;
	qsort(ch, sz, sizeof(ch[0]), cmp_string);
	for (i = 0; i< sz; i++)
	{
		printf("%s ", ch[i]);
	}
	return 0;
}

按正常排序

int cmp_string(const void* elem1, const void* elem2)
{
	return strcmp((char*)elem1,(char*)elem2);
}
int main()
{
	char ch[5][10] = { "aaa","a","aaaaa","aa","aaaa" };
	int sz = sizeof(ch) / sizeof(ch[0]);
	int i = 0;
	qsort(ch, sz, sizeof(ch[0]), cmp_string);
	for (i = 0; i< sz; i++)
	{
		printf("%s ", ch[i]);
	}
	return 0;
}

3.5 結構體?
typedef struct Stu
{
	char name[20];
	int age;
}Stu;

int cmp_str(const void* elem1, const void* elem2)
{
	return strcmp(((Stu*)elem1)->name, ((Stu*)elem2)->name);
}

int main()
{
	Stu s[] = { {"張三",18},{"李四",19},{"王五",20} };
	int sz = sizeof(s) / sizeof(s[0]);
	int i = 0;
	qsort(s, sz, sizeof(s[0]), cmp_str);
	for (i = 0; i< sz; i++)
	{
		printf("%s %d\n", s[i].name, s[i].age);
	}
	return 0;
}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

本文標題:C語言庫函數—qsort()詳解-創(chuàng)新互聯
網頁地址:http://aaarwkj.com/article0/gihoo.html

成都網站建設公司_創(chuàng)新互聯,為您提供搜索引擎優(yōu)化、用戶體驗、軟件開發(fā)、網站設計公司、品牌網站設計網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都網站建設公司
亚洲欧洲美洲中文天堂| 啪啪视频日韩一区二区| 97高清视频在线观看| 国产美女口爆吞精久久| 免费av在线观看日韩| 亚洲av少妇一区二区成年男人| 秋霞三级在线免费观看| 亚洲av网站女性向在线观看| 国产午夜精品自拍视频| 偷拍福利视频一区二区三区| 久久一区二区视频在线观看| 日本特黄特黄录像在线| 夫妻性生活免费看视频| 97门久欧美日韩久久| 亚洲综合av婷婷激情| 男女午夜激情四射视频| 扒开女性毛茸茸的视频| 天堂av五月在线观看| 国产亚洲精品久在线| 久草视频免费福利资源站| 精品亚洲国产成人av| 亚洲欧美一级二级三级| 欧美日韩国产一区二区的| 日韩熟女av中文字幕| 18岁下禁止看的视频| 日本av在线中文一区二区| av在线手机中文字幕| 中文字幕在线视频黄字幕| 日本国产在线一区二区| 成人黄色av在线看| 成人免费大片在线观看视频| 少妇精品偷拍高潮少妇在线观看| 女同av免费观看网站| 亚洲三区四区视频在线观看| 刚出嫁新婚少妇很紧很爽| 年轻的母亲韩国三级| 亚洲综合中文字幕久久网址| 欧美日本国产高清不卡| 手机不卡高清播放一区二区| 亚洲国产欲色有一二欲色| 国产亚洲黄片免费在线观看|