欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

鋪墊知識

qsort函數(shù)

參數(shù)類型    

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

參數(shù)類型解釋

  • 參數(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*無類型的指針,能夠接受各種類型的參數(shù),這樣的話,我們就能傳各種類型的參數(shù)

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

由于void是無類型指針,所以

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

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

3、想要進(jìn)行這些操作,需要把void類型強(qiáng)制類型轉(zhuǎn)成所需要的類型才能操作,例如(int*)e1,就將void*類型的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)制類型轉(zhuǎn)換后,就知道了步長,使用減法來比較e1和e2的大小

#include<stdio.h>
#include<stdlib.h> 
int int_cmp(const void* e1,const void* e2)
{
    if(*(int*)e1 > *(int*)e2 )//先強(qiáng)制類型轉(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;
};
 
//以名字來對結(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;
};
 
//以年齡來對結(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é)會C語言中的qsort函數(shù)的文章就介紹到這了,更多相關(guān)C語言 qsort函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(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í)不多的游戲之一,跟電腦上的掃雷一樣,下面來從貪吃蛇手機(jī)游戲的前世今生講起
    2021-11-11
  • C++計(jì)算圓形、矩形和三角形的面積

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

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

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

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

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

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

    C語言中強(qiáng)制類型轉(zhuǎn)換的常見方法

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

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

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

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

    這篇文章主要介紹了C語言實(shí)現(xiàn)輸出各種三角形方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(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語言轉(zhuǎn)義字符實(shí)例詳解

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

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

最新評論