? 我們?cè)谑褂妹芭菖判蚍ㄗ鲱}的時(shí)候,經(jīng)常會(huì)遇到運(yùn)算次數(shù)過(guò)多程序超時(shí)的情況,而且冒泡排序法只能對(duì)整形數(shù)組進(jìn)行排序。

? 為了解決這些問(wèn)題!就使用qsort函數(shù)吧!
目錄
一、qsort函數(shù)使用方法
二、qsort函數(shù)使用示例
1.數(shù)組排序
2.字符數(shù)組排序
3.字符串排序
4.結(jié)構(gòu)體排序
??1.?首先qsort函數(shù)是庫(kù)函數(shù),使用前應(yīng)包含對(duì)應(yīng)頭文件#include
? 2.qsort函數(shù)的函數(shù)聲明
int qsort(void*? base,size_t? num,size_t? width,int(*compare)(const?*void e1)(const *void e2))
因?yàn)楸酒恼率?c語(yǔ)言初階文章,所以看不懂沒(méi)關(guān)系,我們直接來(lái)看使用方法
? 3.qsort函數(shù)使用
qsort(需要被排序的數(shù)組,數(shù)組元素個(gè)數(shù),每個(gè)元素大小,排序函數(shù)名)
需要被排序的數(shù)組,數(shù)組元素個(gè)數(shù),每個(gè)元素大小不需要解釋
那么排序函數(shù)是什么意思呢?
排序函數(shù)就是由qsort函數(shù)的使用者自己定義的兩個(gè)元素排大小準(zhǔn)則,我們來(lái)看一個(gè)簡(jiǎn)單的示例
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)首先看排序函數(shù)的參數(shù) 排序函數(shù)的參數(shù)類(lèi)型?一定是const?void*
const—可以使在函數(shù)運(yùn)行的過(guò)程中?原數(shù)組的值不被改變
void—是為了提升函數(shù)普適性,強(qiáng)制規(guī)定函數(shù)參數(shù)為void*
因?yàn)橐粫?huì)要返回參數(shù)?所以函數(shù)返回類(lèi)型規(guī)定int
int* p1 = e1;
int* p2 = e2;void*指針不能直接使用,所以創(chuàng)建兩個(gè)整形指針儲(chǔ)存原指針(被排序元素什么類(lèi)型就用什么指針)
?? ?if (*p1 >*p2)
?{
??? ?return 1;
?}
?else if (*p1 == *p2)
?{
??? ?return 0;
?}
?else if (*p1< *p2)
?{
??? ?return -1;
?}這部分則為使用者自己定義的比較大小準(zhǔn)則,如果該情況為大于則返回一個(gè)>0的值,如果小于返回一個(gè)<0的值,如果等于,則返回0
然后qsort函數(shù)會(huì)自行對(duì)數(shù)組按照規(guī)定準(zhǔn)則進(jìn)行排序。
二、qsort函數(shù)使用示例 ? ? ? 1.數(shù)組排序#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.字符數(shù)組排序#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 };//定義了一個(gè)指針數(shù)組來(lái)存放四個(gè)字符串?dāng)?shù)組的指針(數(shù)組名為數(shù)組第一個(gè)元素地址)
qsort(arr, 4, 4, compare);//每個(gè)元素均為指針,指針大小為4字節(jié)
printf("%s %s %s %s", arr1,arr2,arr3,arr4);
} 4.結(jié)構(gòu)體排序#include#includestruct stu
{
int grade;
char name[20];
char sex[10];
};
int compare(const void* e1, const void* e2)//規(guī)定按成績(jī)排序
{
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)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱(chēng):C語(yǔ)言快速排序——qsort函數(shù)詳解-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.chinadenli.net/article38/dcdepp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)、電子商務(wù)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容