真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

C語言快速排序——qsort函數詳解-創(chuàng)新互聯

? 我們在使用冒泡排序法做題的時候,經常會遇到運算次數過多程序超時的情況,而且冒泡排序法只能對整形數組進行排序。

創(chuàng)新互聯長期為千余家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為青田企業(yè)提供專業(yè)的成都做網站、網站設計,青田網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

? 為了解決這些問題!就使用qsort函數吧!

目錄

一、qsort函數使用方法

二、qsort函數使用示例

1.數組排序

2.字符數組排序

3.字符串排序

4.結構體排序


一、qsort函數使用方法

??1.?首先qsort函數是庫函數,使用前應包含對應頭文件#include

? 2.qsort函數的函數聲明

int qsort(void*? base,size_t? num,size_t? width,int(*compare)(const?*void e1)(const *void e2))

因為本篇文章是?c語言初階文章,所以看不懂沒關系,我們直接來看使用方法

? 3.qsort函數使用

qsort(需要被排序的數組,數組元素個數,每個元素大小,排序函數名)

需要被排序的數組,數組元素個數,每個元素大小不需要解釋

那么排序函數是什么意思呢?

排序函數就是由qsort函數的使用者自己定義的兩個元素排大小準則,我們來看一個簡單的示例

int compare(const void* e1, const void* e2)
{
	int* p1 = e1;
	int* p2 = e2;
	if (*p1 >*p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1< *p2)
	{
		return -1;
	}
}
int compare(const void* e1, const void* e)

首先看排序函數的參數 排序函數的參數類型?一定是const?void*

const—可以使在函數運行的過程中?原數組的值不被改變

void—是為了提升函數普適性,強制規(guī)定函數參數為void*

因為一會要返回參數?所以函數返回類型規(guī)定int

int* p1 = e1;
int* p2 = e2;

void*指針不能直接使用,所以創(chuàng)建兩個整形指針儲存原指針(被排序元素什么類型就用什么指針)

?? ?if (*p1 >*p2)
?{
??? ?return 1;
?}
?else if (*p1 == *p2)
?{
??? ?return 0;
?}
?else if (*p1< *p2)
?{
??? ?return -1;
?}

這部分則為使用者自己定義的比較大小準則,如果該情況為大于則返回一個>0的值,如果小于返回一個<0的值,如果等于,則返回0

然后qsort函數會自行對數組按照規(guī)定準則進行排序。

二、qsort函數使用示例 ? ? ? 1.數組排序
#include#includeint compare(const void* e1, const void* e2)
{
	int* p1 = e1;
	int* p2 = e2;
	if (*p1 >*p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1< *p2)
	{
		return -1;
	}
}
int main()
{
	int arr[10] = { 1,3,5,7,9,2,4,6,8,10 };
	qsort(arr, 10, 4, compare);
	for (int i = 0; i<= 9; i++)
	{
		printf("%d ", arr[i]);
	}
}
2.字符數組排序
#include#includeint compare(const void* e1, const void* e2)
{
	char* p1 = e1;
	char* p2 = e2;
	if (*p1 >*p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1< *p2)
	{
		return -1;
	}
}
int main()
{
	char arr[10] = { 'a','c','b','d','h','g','t','n' ,'w'};
	qsort(arr, 9, 1, compare);
	printf("%s", arr);
}
3.字符串排序
#include#includeint compare(const void* e1, const void* e2)//規(guī)定按首字母順序排序
{
	char* p1 = e1;
	char* p2 = e2;
	if (*p1 >*p2)
	{
		return 1;
	}
	else if (*p1 == *p2)
	{
		return 0;
	}
	else if (*p1< *p2)
	{
		return -1;
	}
}
int main()
{
	char arr1[5] = "abc";
	char arr2[5] = "bcd";
	char arr3[5] = "cdf";
	char arr4[5] = "gnm";
	char* arr[4] = { arr1,arr2,arr3,arr4 };//定義了一個指針數組來存放四個字符串數組的指針(數組名為數組第一個元素地址)
	qsort(arr, 4, 4, compare);//每個元素均為指針,指針大小為4字節(jié)
	printf("%s %s %s %s", arr1,arr2,arr3,arr4);
}
4.結構體排序
#include#includestruct stu
{
	int grade;
	char name[20];
	char sex[10];
};
int compare(const void* e1, const void* e2)//規(guī)定按成績排序
{
	struct stu* p1 = e1;
	struct stu* p2 = e2;
	if (p1->grade >p2->grade)
	{
		return 1;
	}
	else if (p1->grade==p2->grade)
	{
		return 0;
	}
	else if (p1->grade< p2->grade)
	{
		return -1;
	}
}

int main()
{
	struct stu a = { 90,"zhangsan","man" };
	struct stu b = { 80,"lisi","man" };
	struct stu c = { 70,"wangwu","man" };
	struct stu arr[3] = { a,b,c };
	qsort(arr, 3, sizeof(a), compare);
	for (int i = 0; i<= 2; i++)
		printf("%d %s %s\n", arr[i].grade, arr[i].name, arr[i].sex);
}

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


網站名稱:C語言快速排序——qsort函數詳解-創(chuàng)新互聯
本文路徑:http://weahome.cn/article/dcdepp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部