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

C語言庫函數(shù)中qsort()的用法

 更新時(shí)間:2021年12月24日 09:12:57   作者:小小蔡很菜  
大家好,本篇文章主要講的是C語言庫函數(shù)中qsort()的用法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

qsort是庫函數(shù)提供的一種排序方法,我們就簡(jiǎn)單1了解一下怎么去用,而不去深究它的庫函數(shù)是怎么寫的

qsort是庫函數(shù)中提供的一種能排序任何類型的數(shù)據(jù)的一種排序方法,思想是quick sort(快速排序),今天我聽鵬哥講指針,剛好引入了這一點(diǎn),我就趁熱打鐵,總結(jié)一下該排序的用法

(一)void*? 的指針類型是什么?

void*類型的指針是能接受任何數(shù)據(jù)類型的地址,但是void*的指針類型是不能進(jìn)行解引用操作的,也不能進(jìn)行加減整數(shù)的操作,因?yàn)関oid*不知道它會(huì)占用多少個(gè)字節(jié)

#include <stdio.h>
int main()
{
int a=10;
char ch='w';
void* p=&a;
p=&ch;
return 0;
}

(二)void?qsort(void*,?size_t,?size_t,?int?(?*?)(const?void?*?,??const?void?*??))? 該怎么使用該庫函數(shù)?

我們先來看看qsort()內(nèi)部有些什么參數(shù),參數(shù)類型是什么,該怎么用。

void?qsort(void* base,?size_t,?size_t,?int?(?*?)(const?void?*?,??const?void?*??))

可以看出共有四個(gè)參數(shù)

1.void1* base:待排序數(shù)組的首地址,可直接輸入待排序數(shù)組名,也可使用指針指向該數(shù)組

2.size_t num:數(shù)組的長(zhǎng)度,假如有數(shù)組int arr[ ]用sz=sizeof(arr)/sizeof(arr[0])來計(jì)算數(shù)組的長(zhǎng)度

3.size_t width:數(shù)組中的元素所占字節(jié),可用sizeof(arr[0])來計(jì)算單個(gè)元素的字節(jié)數(shù)

4.

int (*cmp)(const void* e1,const void* e2)
{
return  *(int*)e1 - *(int*)e2;//因?yàn)関oid*類型的指針不能進(jìn)行加減操作,所以先將e1,e2進(jìn)行強(qiáng)制類型轉(zhuǎn)換,轉(zhuǎn)為int*,然后對(duì)其進(jìn)行解引用
//不同的情形可以根據(jù)不同的比較方式來寫入這個(gè)函數(shù)
//例如,字符串進(jìn)行比較的時(shí)候,可以引用strcmp()這個(gè)函數(shù)
}

:從這個(gè)形式可看出這是一個(gè)函數(shù)指針類型的參數(shù),意味著將要調(diào)用一個(gè)函數(shù),而這個(gè)函數(shù)在庫函數(shù)中表示進(jìn)行排序的方式

這里簡(jiǎn)單解釋一下這個(gè)函數(shù)指針的意義

int 表示返回的是一個(gè)int類型的值

cmp表示函數(shù)名,*cmp表示指向這個(gè)函數(shù)

(const void* e1,const void* e2)這里·的e1,e2表示將要進(jìn)行比較的兩個(gè)元素,然后將兩個(gè)元素的地址傳到函數(shù)里,const表示無法修改指針指向的值

(三)使用qsort()來排序不同類型的數(shù)據(jù)

1.整型

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

2.浮點(diǎn)型

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int cmp_float(const void* e1, const void* e2)
{
	return (int)(*(int*)e1 - *(int*)e2);
    
}
int main()
{
	float arr[6] = { 2.0,2.3,4.5,5.0,8.0,9.0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_float);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%.2f ", arr[i]);
	}
	return 0;
}

3.結(jié)構(gòu)體數(shù)據(jù)類型(數(shù)字,字符串)

下面我創(chuàng)建了一個(gè)機(jī)構(gòu)體,我先以結(jié)構(gòu)體中年齡排序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
 
struct stu
{
	char name[20];
	int age;
	char sex[10];
};
int cmp_stu_by_age(const void* e1, const void* e2)//按年齡排序
{
	return ((struct stu*)e1)->age- ((struct stu*)e2)->age;
}
int main()
{
	struct stu s[3] = { {"zhangsan",30,"man"},{"lisi",20,"man"},{"ruhua",18,"woman"}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
	int i;
	for (i = 0; i < sz; i++)
	{
		printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
	}
	return 0;
}

?然后以姓名排序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
	char name[20];
	int age;
	char sex[10];
};
int cmp_stu_by_name(const void* e1, const void* e2)
{
	return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
 
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
//	return ((struct stu*)e1)->age- ((struct stu*)e2)->age;
//}
int main()
{
	struct stu s[3] = { {"zhangsan",30,"man"},{"lisi",20,"man"},{"ruhua",18,"woman"}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
	int i;
	for (i = 0; i < sz; i++)
	{
		printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
	}
	return 0;
}

?總結(jié):

今天的qsort就這樣了,關(guān)鍵在于

int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}這一部分的書寫與理解,然后就是孰能生巧,多練習(xí)就會(huì)知道怎么用了

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

相關(guān)文章

  • c語言實(shí)現(xiàn)的帶通配符匹配算法

    c語言實(shí)現(xiàn)的帶通配符匹配算法

    這篇文章主要介紹了c語言實(shí)現(xiàn)的帶通配符匹配算法,需要的朋友可以參考下
    2015-03-03
  • C語言 表、棧和隊(duì)列詳解及實(shí)例代碼

    C語言 表、棧和隊(duì)列詳解及實(shí)例代碼

    這篇文章主要介紹了C語言 表、棧和隊(duì)列詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java?C++題解?leetcode第k個(gè)數(shù)實(shí)例

    Java?C++題解?leetcode第k個(gè)數(shù)實(shí)例

    這篇文章主要為大家介紹了Java?C++題解?leetcode第k個(gè)數(shù)實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C語言深入詳解四大內(nèi)存函數(shù)的使用

    C語言深入詳解四大內(nèi)存函數(shù)的使用

    這篇文章主要介紹了C語言的四大內(nèi)存函數(shù),講解了mencpy、memmove、memcmp、memset函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-07-07
  • C語言通過案例講解并發(fā)編程模型

    C語言通過案例講解并發(fā)編程模型

    所謂并發(fā)編程是指在一臺(tái)處理器上“同時(shí)”處理多個(gè)任務(wù)。并發(fā)是在同一實(shí)體上的多個(gè)事件。多個(gè)事件在同一時(shí)間間隔發(fā)生,下面我們根據(jù)樣例來理解
    2022-04-04
  • C語言學(xué)習(xí)之關(guān)鍵字的示例詳解

    C語言學(xué)習(xí)之關(guān)鍵字的示例詳解

    關(guān)鍵字,這名字一聽,就很關(guān)鍵。而有些關(guān)鍵字,你可能不是很了解,更別談使用。所以,這篇文章將帶你見識(shí)常見的關(guān)鍵字,一起領(lǐng)略它們的風(fēng)采吧
    2022-10-10
  • C++中virtual繼承的深入理解

    C++中virtual繼承的深入理解

    本篇文章是對(duì)C++中的virtual繼承進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C?C++輸入輸出基礎(chǔ)教程示例詳解

    C?C++輸入輸出基礎(chǔ)教程示例詳解

    當(dāng)我們?cè)诰W(wǎng)站做題的時(shí)候經(jīng)常會(huì)遇到各種要求的輸入輸出,而且會(huì)有時(shí)間超限等多個(gè)問題,這時(shí)我們就要優(yōu)化我們的輸入輸出或者規(guī)范我們的輸入輸出格式,下面介紹C和C++中的輸入輸出問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-11-11
  • Qt 實(shí)現(xiàn)桌面雪花飄落代碼

    Qt 實(shí)現(xiàn)桌面雪花飄落代碼

    這篇文章主要介紹了Qt實(shí)現(xiàn)桌面雪花飄落代碼,有需要的朋友可以參考一下
    2013-12-12
  • 淺析iterator與指針的區(qū)別

    淺析iterator與指針的區(qū)別

    指針和iterator都支持減法運(yùn)算,指針-指針得到的是兩個(gè)指針之間的距離,迭代器-迭代器得到的是兩個(gè)迭代器之間的距離
    2013-10-10

最新評(píng)論

临夏县| 甘肃省| 新竹市| 棋牌| 靖西县| 福州市| 涡阳县| 焉耆| 乾安县| 东光县| 昌宁县| 深州市| 晋宁县| 山丹县| 保亭| 鹿邑县| 宿松县| 河源市| 漳平市| 慈溪市| 西盟| 青河县| 元氏县| 勐海县| 玛曲县| 新乡市| 梅河口市| 钟山县| 翁牛特旗| 社旗县| 曲麻莱县| 石门县| 中山市| 汶上县| 嘉鱼县| 堆龙德庆县| 佛坪县| 长治市| 彩票| 盐津县| 闵行区|