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

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

 更新時間:2022年12月21日 08:53:38   作者:暢游星辰大海  
qsort函數(shù)是C語言的庫函數(shù),能實現(xiàn)對各種元素類型的比較,使用的基本思想是快速排序法,頭文件是<stdlib.h>,本文不講解具體實現(xià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)元素個數(shù)
  • 參數(shù)3 數(shù)組內(nèi)每個元素大小,單位是字節(jié)
  • 參數(shù)4 函數(shù)指針,由自己實現(xiàn),內(nèi)容是兩個元素的比較方法

void* 

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

void*的注意事項    

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

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

2、不能進行解引用操作,

3、想要進行這些操作,需要把void類型強制類型轉成所需要的類型才能操作,例如(int*)e1,就將void*類型的e1轉換為int*

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

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

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

當然,我們可以用強制類型轉換后,就知道了步長,使用減法來比較e1和e2的大小

#include<stdio.h>
#include<stdlib.h> 
int int_cmp(const void* e1,const void* e2)
{
    if(*(int*)e1 > *(int*)e2 )//先強制類型轉換,在解引用進行比較
       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ù)進行浮點型數(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ù)進行結構體數(shù)組的排序

以學生信息結構體為例,結構體包括學生名字和學生年齡

以名字為基準進行比較

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct student
{
    char name[10];
    int age;
};
 
//以名字來對結構體進行排序
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);
    }
}

以年齡為基準進行比較 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct student
{
    char name[10];
    int age;
};
 
//以年齡來對結構體進行排序
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);
    }
}

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

相關文章

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

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

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

    C++計算圓形、矩形和三角形的面積

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

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

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

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

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

    C語言中強制類型轉換的常見方法

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

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

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

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

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

    Qt實現(xiàn)可拖動按鈕

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

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

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

    C語言轉義字符實例詳解

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

最新評論