用庫函數(shù)qsort實(shí)現(xiàn)任意類型數(shù)據(jù)排序C語言-創(chuàng)新互聯(lián)

qsort函數(shù)介紹

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* 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ù),需要引頭文件#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)

成都app開發(fā)公司