亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文帶你學(xué)會(huì)C語(yǔ)言中的qsort函數(shù)

 更新時(shí)間:2022年12月21日 08:53:38   作者:暢游星辰大海  
qsort函數(shù)是C語(yǔ)言的庫(kù)函數(shù),能實(shí)現(xiàn)對(duì)各種元素類(lèi)型的比較,使用的基本思想是快速排序法,頭文件是<stdlib.h>,本文不講解具體實(shí)現(xiàn)原理,只對(duì)使用方法進(jìn)行說(shuō)明,希望對(duì)大家有所幫助

鋪墊知識(shí)

qsort函數(shù)

參數(shù)類(lèi)型    

void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));

參數(shù)類(lèi)型解釋

  • 參數(shù)1 待排序數(shù)組首元素的地址
  • 參數(shù)2 數(shù)組內(nèi)元素個(gè)數(shù)
  • 參數(shù)3 數(shù)組內(nèi)每個(gè)元素大小,單位是字節(jié)
  • 參數(shù)4 函數(shù)指針,由自己實(shí)現(xiàn),內(nèi)容是兩個(gè)元素的比較方法

void* 

參數(shù)1和參數(shù)4中的void*無(wú)類(lèi)型的指針,能夠接受各種類(lèi)型的參數(shù),這樣的話,我們就能傳各種類(lèi)型的參數(shù)

void*的注意事項(xiàng)    

由于void是無(wú)類(lèi)型指針,所以

1、void類(lèi)型指針不能進(jìn)行加減整數(shù)的操作(不知道步長(zhǎng))

2、不能進(jìn)行解引用操作,

3、想要進(jìn)行這些操作,需要把void類(lèi)型強(qiáng)制類(lèi)型轉(zhuǎn)成所需要的類(lèi)型才能操作,例如(int*)e1,就將void*類(lèi)型的e1轉(zhuǎn)換為int*

使用qsort函數(shù)進(jìn)行整型數(shù)組的排序

在自己完成的in_cmp函數(shù)中,給出的是兩個(gè)元素的比較方法

  • 正序排序時(shí),e1>e2,返回大于0的數(shù),e1==e2,返回0,e1<e2,返回小于0的數(shù)
  • 逆序排序時(shí),e1>e2,返回小于0的數(shù),e1==e2,返回0,e1<e2,返回大于0的數(shù)

當(dāng)然,我們可以用強(qiáng)制類(lèi)型轉(zhuǎn)換后,就知道了步長(zhǎng),使用減法來(lái)比較e1和e2的大小

#include<stdio.h>
#include<stdlib.h> 
int int_cmp(const void* e1,const void* e2)
{
    if(*(int*)e1 > *(int*)e2 )//先強(qiáng)制類(lèi)型轉(zhuǎn)換,在解引用進(jìn)行比較
       return 1;
    else if(*(int*)e1 == *(int*)e2 )
       return 0;
    else 
       return -1;
}
int main()
{
    int i=0;
    int arr[10]={1,4,0,5,8,9,2,3,6,7};
    int sz=sizeof(arr)/sizeof(arr[0]);
    qsort(arr,sz,sizeof(arr[0]),int_cmp);
    for(i=0;i<sz;i++)
       printf("%d ",arr[i]);
    return 0;
}

使用qsort函數(shù)進(jìn)行浮點(diǎn)型數(shù)組的排序

#include<stdio.h>
#include<stdlib.h> 
int float_cmp(const void* e1,const void* e2)
{
    return *(float*)e1 - *(float*)e2;
}
int main()
{
    int i=0;
    float arr[5]={1.0,3.5,2.2,7.3,5.5};
    int sz=sizeof(arr)/sizeof(arr[0]);
    qsort(arr,sz,sizeof(arr[0]),float_cmp);
    for(i=0;i<sz;i++)
       printf("%.1f ",arr[i]);
    return 0;
}

使用qsort函數(shù)進(jìn)行結(jié)構(gòu)體數(shù)組的排序

以學(xué)生信息結(jié)構(gòu)體為例,結(jié)構(gòu)體包括學(xué)生名字和學(xué)生年齡

以名字為基準(zhǔn)進(jìn)行比較

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct student
{
    char name[10];
    int age;
};
 
//以名字來(lái)對(duì)結(jié)構(gòu)體進(jìn)行排序
int struct_cmp_byname(const void* e1, const void* e2)
{
    return strcmp(((struct student*)e1)->name, ((struct student*)e2)->name);
}
 
int main()
{
    int i=0;
    struct student stu[3] = { {"張三",20},{"李四",19},{"王五",18}};
    int sz = sizeof(stu) / sizeof(stu[0]);
    qsort(stu, sz, sizeof(stu[0]), struct_cmp_byname);
    for (i = 0; i < sz; i++)
    {
        printf("%s %d\n", stu[i].name, stu[i].age);
    }
}

以年齡為基準(zhǔn)進(jìn)行比較 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct student
{
    char name[10];
    int age;
};
 
//以年齡來(lái)對(duì)結(jié)構(gòu)體進(jìn)行排序
int struct_cmp_byage(const void* e1, const void* e2)
{
    return ((struct student*)e1)->age - ((struct student*)e2)->age;
}
 
int main()
{
    int i=0;
    struct student stu[3] = { {"張三",20},{"李四",19},{"王五",18}};
    int sz = sizeof(stu) / sizeof(stu[0]);
    qsort(stu, sz, sizeof(stu[0]), struct_cmp_byage);
    for (i = 0; i < sz; i++)
    {
        printf("%s %d\n", stu[i].name, stu[i].age);
    }
}

到此這篇關(guān)于一文帶你學(xué)會(huì)C語(yǔ)言中的qsort函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言 qsort函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 情懷游戲貪吃蛇的實(shí)現(xiàn)流程詳解

    C++ 情懷游戲貪吃蛇的實(shí)現(xiàn)流程詳解

    貪吃蛇是曾經(jīng)諾基亞手機(jī)上很經(jīng)典很經(jīng)典的傳統(tǒng)老游戲,80.90后的童年時(shí)不多的游戲之一,跟電腦上的掃雷一樣,下面來(lái)從貪吃蛇手機(jī)游戲的前世今生講起
    2021-11-11
  • C++計(jì)算圓形、矩形和三角形的面積

    C++計(jì)算圓形、矩形和三角形的面積

    這篇文章介紹了C++計(jì)算圓形、矩形和三角形面積的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C++實(shí)現(xiàn)拼圖游戲代碼(graphics圖形庫(kù))

    C++實(shí)現(xiàn)拼圖游戲代碼(graphics圖形庫(kù))

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)拼圖游戲代碼,帶有g(shù)raphics圖形庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語(yǔ)言實(shí)現(xiàn)數(shù)組元素排序方法詳解

    C語(yǔ)言實(shí)現(xiàn)數(shù)組元素排序方法詳解

    這篇文章主要為大家介紹了C語(yǔ)言算法練習(xí)中數(shù)組元素排序的實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下
    2023-02-02
  • C語(yǔ)言中強(qiáng)制類(lèi)型轉(zhuǎn)換的常見(jiàn)方法

    C語(yǔ)言中強(qiáng)制類(lèi)型轉(zhuǎn)換的常見(jiàn)方法

    強(qiáng)制類(lèi)型轉(zhuǎn)換是一種將一個(gè)數(shù)據(jù)類(lèi)型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類(lèi)型的方法,這篇文章主要為大家整理了C語(yǔ)言中強(qiáng)制類(lèi)型轉(zhuǎn)換的方法,需要的可以參考一下
    2023-05-05
  • C語(yǔ)言實(shí)現(xiàn)宿舍管理系統(tǒng)課程設(shè)計(jì)

    C語(yǔ)言實(shí)現(xiàn)宿舍管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)宿舍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語(yǔ)言實(shí)現(xiàn)輸出各種三角形

    C語(yǔ)言實(shí)現(xiàn)輸出各種三角形

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸出各種三角形方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Qt實(shí)現(xiàn)可拖動(dòng)按鈕

    Qt實(shí)現(xiàn)可拖動(dòng)按鈕

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)可拖動(dòng)按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++實(shí)現(xiàn)一鍵關(guān)閉桌面的示例代碼

    C++實(shí)現(xiàn)一鍵關(guān)閉桌面的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一鍵關(guān)閉桌面的功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-07-07
  • C語(yǔ)言轉(zhuǎn)義字符實(shí)例詳解

    C語(yǔ)言轉(zhuǎn)義字符實(shí)例詳解

    這里主要介紹了C語(yǔ)言的轉(zhuǎn)義字符的知識(shí),并附有示例代碼,以便理解,希望對(duì)學(xué)習(xí) C語(yǔ)言的同學(xué)有所幫助
    2016-07-07

最新評(píng)論