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

C語(yǔ)言詳細(xì)講解qsort函數(shù)的使用

 更新時(shí)間:2022年04月22日 14:44:22   作者:平凡的人1  
排序方法有很多種:選擇排序,冒泡排序,歸并排序,快速排序等。看名字都知道快速排序是目前公認(rèn)的一種比較好的排序算法。因?yàn)樗俣群芸?,所以系統(tǒng)也在庫(kù)里實(shí)現(xiàn)這個(gè)算法,便于我們的使用。這就是qsort函數(shù)

qsort

  • 功能:Performs a quick sort.(快速排序)
  • 參數(shù):void qsort( void *base, size_t num, size_t width, int (*cmp )(const void *e1, const void *e2 ) );
  • 頭文件:#include <stdlib.h>

用法:

  • 第一個(gè)參數(shù)待排數(shù)組的首元素地址
  • 第二個(gè)參數(shù)待排數(shù)據(jù)個(gè)數(shù)
  • 第三個(gè)待排數(shù)據(jù)中每個(gè)參數(shù)的大小——單位是字節(jié)
  • 第四個(gè)編寫一個(gè)函數(shù)來(lái)判斷待排數(shù)據(jù)誰(shuí)大誰(shuí)小,其規(guī)定如下

void*類型的指針 可以接收任意類型的地址

void*類型的指針 不能進(jìn)行解引用的操作(訪問(wèn)字節(jié)不確定)

void*類型的指針 不能進(jìn)行加減整數(shù)的操作

下面我們先來(lái)看一下簡(jiǎn)單的運(yùn)用及其結(jié)果

1.int型

#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
    //比較兩個(gè)整型類型
    return *(int*)e1 - *(int*)e2;
}
int main()
{
    int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, sz, sizeof(arr[0]), cmp_int);
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

看到這里,這是升序排列的,如果要降序的話,直接return*(int*)e2-*(int*)e1; 

為了方便,我們把每種類型記住測(cè)試類型test,比如int型為test1,以此類推

2.float型

int cmp_float(const void* e1, const void* e2)
{
    return *(float*)e1 - *(float*)e2;
}
void test2()
{
    float f[] = { 9.0,8.0,7.0,5.0,4.0 };
    int sz = sizeof(f) / sizeof(f[0]);
    qsort(f, sz, sizeof(f[0]), cmp_float);
    int j = 0;
    for (j = 0; j < sz; j++)
    {
        printf("%f ", f[j]);
    }
}
int main()
{
test2();
return 0;
}

3.struct型

由于struct結(jié)構(gòu)體的成員可能有許多的類型,我這里只舉了比較簡(jiǎn)單的例子結(jié)構(gòu)體成員只包含名字和年齡。用qsort按照年齡排序,按照名字排序

struct Stu 
{
    char name[20];
    int age;
};

struct-age

int cmp_Stu_by_age(const void*e1,const void*e2)
{
    return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
void test3()
{
    struct Stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",18} };
    int sz = (sizeof(s) / sizeof(s[0]));
    qsort(s, sz, sizeof(s[0]), cmp_Stu_by_age);
    int z = 0;
    for (z = 0; z < sz; z++)
    {
        printf("%s %d", s[z].name,s[z].age);
    }
}
int main()
{
test3();
return 0;
}

struct-name

int cmp_Stu_by_name(const void* e1, const void* e2)
{
    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test4()
{
    struct Stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",18} };
    int sz = (sizeof(s) / sizeof(s[0]));
    qsort(s, sz, sizeof(s[0]), cmp_Stu_by_name);
    int z = 0;
    for (z = 0; z < sz; z++)
    {
        printf("%s %d", s[z].name,s[z].age);
    }
}
int main()
{
test 4();
return 0;
}

 這里有一個(gè)需要注意的點(diǎn),字符串比較要用strcmp函數(shù)來(lái)比較,不能直接去進(jìn)行相減。

 好啦,本次有關(guān)qsort函數(shù)到此結(jié)束啦,點(diǎn)個(gè)贊把。

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

相關(guān)文章

  • c++ vector模擬實(shí)現(xiàn)代碼

    c++ vector模擬實(shí)現(xiàn)代碼

    vector是C++ STL中一個(gè)非常重要的容器,了解 vector 的底層實(shí)現(xiàn)原理,可以很好的幫助我們更加熟練的使用vector。這篇文章通過(guò)實(shí)例代碼給大家介紹c++ vector模擬實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2020-02-02
  • C語(yǔ)言#define定義宏的使用詳解

    C語(yǔ)言#define定義宏的使用詳解

    #define?機(jī)制包括了一個(gè)規(guī)定,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常稱為宏(macro)或定義宏(define?macro)。本文就來(lái)和大家聊聊宏的使用,需要的可以參考一下
    2022-10-10
  • C++函數(shù)指針詳解

    C++函數(shù)指針詳解

    這篇文章主要介紹了C++函數(shù)指針詳解,通過(guò)文字描述C++函數(shù)指針基礎(chǔ)概念,內(nèi)涵詳細(xì)的代碼實(shí)現(xiàn)和解析,希望對(duì)你能夠有所幫助
    2021-06-06
  • 深入分析C中不安全的sprintf與strcpy

    深入分析C中不安全的sprintf與strcpy

    本篇文章是對(duì)C中不安全的sprintf與strcpy函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 基于C++和MFC開(kāi)發(fā)象棋程序

    基于C++和MFC開(kāi)發(fā)象棋程序

    這篇文章主要為大家詳細(xì)介紹了基于C++和MFC開(kāi)發(fā)象棋程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C語(yǔ)言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊

    C語(yǔ)言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來(lái)了解C 的結(jié)構(gòu)體內(nèi)存對(duì)齊
    2022-03-03
  • C++11中delete和default的用法詳解

    C++11中delete和default的用法詳解

    這篇文章主要為大家詳細(xì)介紹了C++11中delete和default的具體用法,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-08-08
  • 最新評(píng)論