最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言之qsort函數(shù)詳解

 更新時(shí)間:2021年08月24日 16:01:31   作者:可愛的樂樂哥哥  
這篇文章主要介紹了C語言中qsort函數(shù)的用法實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下

一.qsort函數(shù)原型

qsort 功 能: 使用快速排序例程進(jìn)行排序,這個(gè)函數(shù)是根據(jù)二分法寫的,其時(shí)間復(fù)雜度為n*log(n)

#include<stdlib.h>
void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *))

各參數(shù):1. 待排序數(shù)組首地址(可直接輸入待排序數(shù)組名,或是指向數(shù)組的指針)

2. 數(shù)組中待排序元素?cái)?shù)量(可以用sizeof()來求)

3. 各元素的占用空間大?。梢杂胹izeof(arr[0])來求)

4. 指向函數(shù)的指針

這個(gè)qsort需要我們自己創(chuàng)建一個(gè)比較函數(shù),基本都是這個(gè)函數(shù)

int cmp(const void* _a, const void* _b);

二.qsort常見的幾種比較函數(shù)

1.int類型的排序

int cmp(const void* _a, const void* _b)
{
 int* a = (int*)_a;
 int* b = (int*)_b;
 return *a-*b;
}
int main()
{
 int num[10] = { 5,7,8,1,26,52,9,3,14,56 };
 int sz = sizeof(num) / sizeof(num[0]);
 qsort(num, sz, sizeof(num[0]), cmp);
 int i = 0;
 for (i = 0; i < sz; i++)
 {
  printf("%d ", num[i]);
 }
}

*a-*b這個(gè)是從小到大排序,如果想從大到小排序就是*b-*a;

升序排序結(jié)果圖:

降序排列:

int cmp(const void* _a, const void* _b)
{
 int* a = (int*)_a;
 int* b = (int*)_b;
 return *b-*a;
}
int main()
{
 int num[10] = { 5,7,8,1,26,52,9,3,14,56 };
 int sz = sizeof(num) / sizeof(num[0]);
 qsort(num, sz, sizeof(num[0]), cmp);
 int i = 0;
 for (i = 0; i < sz; i++)
 {
  printf("%d ", num[i]);
 }
}

其實(shí)降序排序就是換成*b-*a

降序排序效果圖:

2.double類型的排序

int cmp(const void* _a, const void* _b)
{
 double* a = (double*)_a;
 double* b = (double*)_b;
 return  *(double*)_a > *(double*)_b ? 1 : -1;;
}
int main()
{
 double num[4] = { 2.1,5.2,3.2,445.2};
 int sz = sizeof(num) / sizeof(num[0]);
 qsort(num, sz, sizeof(num[0]), cmp);
 int i = 0;
 for (i = 0; i < sz; i++)
 {
  printf("%.2f ", num[i]);
 }
}

double類型的比較特殊,因?yàn)榉祷刂凳莍nt,所以如果是兩個(gè)特別相近的浮點(diǎn)數(shù)相減,那么就有可能會(huì)出現(xiàn)的結(jié)果比-1大并且比1小,這樣系統(tǒng)就會(huì)默認(rèn)為0,所以這里使用了一個(gè)三目運(yùn)算,用來比較。

排序效果圖:

3.char類型的排序

char cmp(const void* _a, const void* _b)
{
 char* a = (char*)_a;
 char* b = (char*)_b;
 return *a - *b;
}
int main()
{
 char num[4] = { 'a','c','f','e'};
 int sz = sizeof(num) / sizeof(num[0]);
 qsort(num, sz, sizeof(num[0]), cmp);
 int i = 0;
 for (i = 0; i < sz; i++)
 {
  printf("%c ", num[i]);
 }
}

其實(shí)chai類型和int類型的差不多,比較的都是ASCII碼值,只不過是char類型是按字符輸出。

排序效果圖:

4.字符串的排序:

1.按首字母排序

#define c 10
#define d 10
int cmp(const void* _a, const void* _b)
{
 char* a = (char*)_a;
 char* b = (char*)_b;
 return *a-*b;
}
int main()
{
 char num[c][d] = {"ac","fd","rbsc","jcse","efgd",
  "arbs","bbs","cbfe","dgafg" ,"ewqrta" };
 qsort(num, c, sizeof(char)*d, cmp);
 int i = 0;
 for (i = 0; i < c; i++)
 {
   printf("%s\n", num[i]);
 }
}

這個(gè)排序是比較首字母的ASCII碼值進(jìn)行排序的

排序效果圖:

2.按字符串長(zhǎng)度排序:

#define c 10
#define d 10
int cmp(const void* _a, const void* _b)
{
 char* a = (char*)_a;
 char* b = (char*)_b;
 return strlen(a)>strlen(b)?1:-1;
}
int main()
{
 char num[c][d] = { "ac","fd","rbsc","jcse","efgd",
  "arbs","bbs","cbfe","dgafg" ,"ewqrta" };
 qsort(num, c, sizeof(char) * d, cmp);
 int i = 0;
 for (i = 0; i < c; i++)
 {
  printf("%s\n", num[i]);
 }
}

這個(gè)排序方式是按字符串的長(zhǎng)度

qsort正常的使用方法和場(chǎng)景基本都在這了,還有一類是結(jié)構(gòu)體的排序,這個(gè)我還沒有遇到過,一會(huì)遇到了可能會(huì)更新。希望對(duì)大家有幫助。

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言中的隱式函數(shù)聲明

    C語言中的隱式函數(shù)聲明

    在c語言里面開來還是要學(xué)習(xí)c++的編程習(xí)慣,使用函數(shù)之前一定要聲明。不然,即使編譯能通過,運(yùn)行時(shí)也可能會(huì)出一些莫名其妙的問題。
    2016-01-01
  • C語言超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中的線性表

    C語言超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中的線性表

    線性表,數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的一種存儲(chǔ)結(jié)構(gòu),專門用于存儲(chǔ)邏輯關(guān)系為"一對(duì)一"的數(shù)據(jù)。線性表是基于數(shù)據(jù)在實(shí)際物理空間中的存儲(chǔ)狀態(tài),又可細(xì)分為順序表(順序存儲(chǔ)結(jié)構(gòu))和鏈表
    2022-05-05
  • C++如何通過ostringstream實(shí)現(xiàn)任意類型轉(zhuǎn)string

    C++如何通過ostringstream實(shí)現(xiàn)任意類型轉(zhuǎn)string

    再使用整型轉(zhuǎn)string的時(shí)候感覺有點(diǎn)棘手,因?yàn)閕toa不是標(biāo)準(zhǔn)C里面的,而且即便是有itoa,其他類型轉(zhuǎn)string不是很方便。后來去網(wǎng)上找了一下,發(fā)現(xiàn)有一個(gè)好方法
    2013-09-09
  • 手把手教你實(shí)現(xiàn)漂亮的Qt?登錄界面

    手把手教你實(shí)現(xiàn)漂亮的Qt?登錄界面

    最近在使用Qt5,Qt?Creator做一個(gè)管理系統(tǒng)類的項(xiàng)目,需要用到登錄界面,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • opencv提取輪廓大于某個(gè)閾值的圖像

    opencv提取輪廓大于某個(gè)閾值的圖像

    這篇文章主要為大家詳細(xì)介紹了opencv提取輪廓大于某個(gè)閾值的圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 關(guān)于C++友元函數(shù)的實(shí)現(xiàn)講解

    關(guān)于C++友元函數(shù)的實(shí)現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++友元函數(shù)的實(shí)現(xiàn)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C/C++中組合詳解及其作用介紹

    C/C++中組合詳解及其作用介紹

    這篇文章主要介紹了C/C++中組合的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++單例模式的幾種實(shí)現(xiàn)方法詳解

    C++單例模式的幾種實(shí)現(xiàn)方法詳解

    這篇文章主要為大家詳細(xì)介紹了C++單例模式的幾種實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)

    C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++實(shí)現(xiàn)單鏈表按k值重新排序的方法

    C++實(shí)現(xiàn)單鏈表按k值重新排序的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)單鏈表按k值重新排序的方法,結(jié)合實(shí)例形式分析了C++單鏈表中按照給定值進(jìn)行判斷與排序的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

安顺市| 衡南县| 绥德县| 西林县| 永德县| 滦平县| 平度市| 浦北县| 新竹县| 菏泽市| 买车| 阜平县| 射阳县| 巴塘县| 剑河县| 三亚市| 儋州市| 平安县| 夏邑县| 名山县| 淄博市| 柘荣县| 渝北区| 新津县| 阿克苏市| 淮南市| 宁晋县| 扎囊县| 安化县| 克什克腾旗| 郓城县| 新巴尔虎右旗| 龙口市| 盐池县| 毕节市| 兴海县| 洮南市| 绵竹市| 玛曲县| 手机| 万源市|