void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元西鄉(xiāng)塘做網(wǎng)站,已為上家服務(wù),為西鄉(xiāng)塘各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792參數(shù)分析庫函數(shù)qsort有四個(gè)參數(shù)
void* basebase中存放的是待排序數(shù)據(jù)中第一個(gè)對(duì)象的地址
size_t num待排序數(shù)據(jù)中的元素個(gè)數(shù)
size_t size待排序數(shù)據(jù)中,每個(gè)元素占的字節(jié)數(shù)
int (*compar)(const void*, const void*)函數(shù)指針compar,指向用來比較待排序數(shù)據(jù)中的兩個(gè)元素的函數(shù)
第一個(gè)const void*,存放第一個(gè)元素的地址
第二個(gè)const void*,存放第二個(gè)元素的地址
使用方法qsort排序函數(shù),需要引頭文件#include
并且需自定義一個(gè)比較函數(shù)
代碼樣例以整形數(shù)據(jù)和結(jié)構(gòu)體數(shù)據(jù)排序?yàn)槔?/p>
#include#include#include//void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
//庫函數(shù)qsort有四個(gè)參數(shù)
//void* base, base中存放的是待排序數(shù)據(jù)中第一個(gè)對(duì)象的地址
//size_t num, 待排序數(shù)據(jù)中的元素個(gè)數(shù)
//size_t size, 待排序數(shù)據(jù)中,每個(gè)元素占的字節(jié)數(shù)
//int (*compar)(const void*, const void*) 函數(shù)指針compar,指向用來比較待排序數(shù)據(jù)中的兩個(gè)元素的函數(shù)
//第一個(gè)const void*,存放第一個(gè)元素的地址
//第二個(gè)const void*,存放第二個(gè)元素的地址
//qsort排序函數(shù),需要引頭文件#includeint compar_int(const void* e1, const void* e2)//整形數(shù)組排序
{
return *(int*)e1 - *(int*)e2;//強(qiáng)制類型轉(zhuǎn)換成int
}
struct Stu
{
char name[20];
int age;
};
int sort_by_age(const void* e1, const void* e2)//結(jié)構(gòu)體數(shù)組排序,按年齡排序
{
return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
int sort_by_name(const void* e1, const void* e2)//結(jié)構(gòu)體數(shù)組排序,按名字排序
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void print1(int arr[], int sz)
{
int i = 0;
for (i = 0; i< sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
//排序整形數(shù)組
int arr1[] = { 1,3,5,7,9,2,4,6,8,0 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
print1(arr1, sz);
//排序
qsort(arr1,sz,sizeof(arr1[0]),compar_int);
//打印
print1(arr1, sz);
printf("\n");
//排序結(jié)構(gòu)體數(shù)據(jù)
struct Stu s[3] = { {"zhangsan",30},{"lisi",34},{"wangwu",20}};
sz = sizeof(s) / sizeof(s[0]);
struct Stu* p = s;
for (p = s; p< &s[3]; p++)
{
printf("%s,%d\n", p->name, p->age);
}
printf("\n");
//按照年齡排序
qsort(s, sz, sizeof(s[0]),sort_by_age);
for (p = s; p< &s[3]; p++)
{
printf("%s,%d\n", p->name, p->age);
}
printf("\n");
//按照名字排序
qsort(s, sz, sizeof(s[0]), sort_by_name);
for (p = s; p< &s[3]; p++)
{
printf("%s,%d\n", p->name, p->age);
}
printf("\n");
return 0;
}
運(yùn)行結(jié)果
注意事項(xiàng)以上代碼默認(rèn)為升序排列
如果需要降序排列,只需將比較函數(shù)中的返回值改為e2-e1即可(交換e1和e2)
char字符串比較時(shí),需定義的比較函數(shù),如下所示
int cmp_char(const void*e1,const void*e2)
{
return strcmp((char*)e1,(char*)e2);
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文標(biāo)題:用庫函數(shù)qsort實(shí)現(xiàn)任意類型數(shù)據(jù)排序C語言-創(chuàng)新互聯(lián)
文章起源:http://muchs.cn/article12/cdcigc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、小程序開發(fā)、App開發(fā)、面包屑導(dǎo)航、自適應(yīng)網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容