国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【c語言】對結(jié)構(gòu)體數(shù)組按照某項規(guī)則進(jìn)行排序

這篇具有很好參考價值的文章主要介紹了【c語言】對結(jié)構(gòu)體數(shù)組按照某項規(guī)則進(jìn)行排序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ? 這是基于qsort()函數(shù)進(jìn)行的簡單排序。(附帶其他類型的數(shù)組使用qsort()進(jìn)行的排序)

目錄

一、qsort()函數(shù)

二、compare()函數(shù)

1.結(jié)構(gòu)體數(shù)組

1)升序?qū)崿F(xiàn)

2)降序?qū)崿F(xiàn)

2.整型數(shù)組

為什么不直接返回?a>b(a)?<>

如果就是想用?a>b(a)返回?<>

?1)升序?qū)崿F(xiàn)

2)降序?qū)崿F(xiàn)

3.浮點型數(shù)組

1)升序?qū)崿F(xiàn)

2)降序?qū)崿F(xiàn)

三、效果圖

總結(jié)



前言

? ? ? ? 基于qsort()函數(shù)進(jìn)行的排序最有用的莫過于在此對于結(jié)構(gòu)體數(shù)組進(jìn)行排序了。此外,若能結(jié)合函數(shù)指針,更是能夠?qū)崿F(xiàn)“想降就降,想升就升”的美好局面。


一、qsort()函數(shù)

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );(來源msdn)

? ? ? ? base:傳過去的數(shù)組

? ? ? ? num:數(shù)組中元素的個數(shù)

? ? ? ? width:數(shù)組中每個元素有多大

? ? ? ? compare():此函數(shù)指針是需要自己實現(xiàn)的、根據(jù)什么規(guī)則進(jìn)行的排序函數(shù)

二、compare()函數(shù)

? ? ? ? 須根據(jù)需要對于參數(shù)進(jìn)行指針類型的轉(zhuǎn)化。

? ? ? ? 若對字符型數(shù)組進(jìn)行排序,那就轉(zhuǎn)換成字符型指針。(char*)

? ? ? ? 若對整型數(shù)組進(jìn)行排序,那就轉(zhuǎn)換成整型指針。(int*)? ? ? ?

????????若對浮點型數(shù)組進(jìn)行排序,那就轉(zhuǎn)換成浮點型指針。(float*)

? ? ? ? 若對結(jié)構(gòu)體數(shù)組的某項進(jìn)行排序,那就轉(zhuǎn)換成結(jié)構(gòu)體指針。(struct xxx*)

1.結(jié)構(gòu)體數(shù)組

? ? ? ? 返回的是兩個結(jié)構(gòu)體指針解引用后相比較的結(jié)果。

1)升序?qū)崿F(xiàn)

代碼如下(示例):

int Ascend(const void* p1, const void* p2)
{
	const stu* x = p1;
	const stu* y = p2;
	// 對于結(jié)構(gòu)體進(jìn)行二級排序:
	// 如果年齡相等,誰成績高誰在前面
	if (x->age == y->age)
	{
		return (x->score < y->score);
	}
	else
	{
		return (x->age < y->age);
	}
}

2)降序?qū)崿F(xiàn)

代碼如下(示例):

int Descend(const void* p1, const void* p2)
{
	const stu* x = p1;
	const stu* y = p2;
	// 對于結(jié)構(gòu)體進(jìn)行二級排序:
	// 如果年齡相等,誰成績高誰在前面
	if (x->age == y->age)
	{
		return (x->score < y->score);
	}
	else
	{
		return (x->age < y->age);
	}
}

2.整型數(shù)組

? ? ? ? 返回的是兩個int指針解引用后相減的結(jié)果。(用三目運算符+大于小于號也可以)

為什么不直接返回?a>b(a<b)?

? ? ? ? 如下圖:因為qsort()在判斷時是需要判斷兩個參數(shù)誰大誰小,是需要一個正數(shù)或者負(fù)數(shù)的,但是直接返回a>b(a<b)的話,這個表達(dá)式的值只有0和非0,非0會被認(rèn)為是相等,從而不進(jìn)行交換。

c語言結(jié)構(gòu)體數(shù)組排序,c語言學(xué)習(xí)筆記,c語言,學(xué)習(xí),經(jīng)驗分享,算法

如果就是想用?a>b(a<b)返回?

? ? ? ? 可以使用三目運算符來規(guī)避a<b時值為0的情況。

c語言結(jié)構(gòu)體數(shù)組排序,c語言學(xué)習(xí)筆記,c語言,學(xué)習(xí),經(jīng)驗分享,算法

c語言結(jié)構(gòu)體數(shù)組排序,c語言學(xué)習(xí)筆記,c語言,學(xué)習(xí),經(jīng)驗分享,算法

?1)升序?qū)崿F(xiàn)

代碼如下(示例):

void ArrComp(const void* p1, const void* p2)
{
	const int* x = p1;
	const int* y = p2;
	return *x - *y;
}

2)降序?qū)崿F(xiàn)

代碼如下(示例):

void ArrDescend(const void* p1, const void* p2)
{
	const int* x = p1;
	const int* y = p2;
	return *y - *x;
}

3.浮點型數(shù)組

? ? ? ? 返回的是兩個float指針解引用相比較的結(jié)果,使用三目運算符進(jìn)行判斷(目的是為了判斷大小后有個正負(fù))。

1)升序?qū)崿F(xiàn)

代碼如下(示例):

void FloatArrAscend(const void* p1, const void* p2)
{
	const float* x = p1;
	const float* y = p2;
	return *x > *y ? 1 : -1;
}

2)降序?qū)崿F(xiàn)

代碼如下(示例):

void FloatArrDescend(const void* p1, const void* p2)
{
	const float* x = p1;
	const float* y = p2;
	return *y < *x ? 1 : -1;
}

三、效果圖

c語言結(jié)構(gòu)體數(shù)組排序,c語言學(xué)習(xí)筆記,c語言,學(xué)習(xí),經(jīng)驗分享,算法

總結(jié)

? ? ? ? qsort()函數(shù)源碼在c庫中使用的是快排進(jìn)行的排序函數(shù),結(jié)合函數(shù)指針,可以實現(xiàn)快速地升、降序的排序。文章來源地址http://www.zghlxwxcb.cn/news/detail-776397.html

到了這里,關(guān)于【c語言】對結(jié)構(gòu)體數(shù)組按照某項規(guī)則進(jìn)行排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java中List對象集合按照對象中某字段進(jìn)行排序

    在Java中,可以使用List集合對象的sort(Comparator? super E c)方法,按照對象中某字段對List集合進(jìn)行排序 栗子: 打印輸出結(jié)果如下:

    2024年02月12日
    瀏覽(20)
  • 《綜合與Design_Compiler》學(xué)習(xí)筆記——第一章綜合綜述 第二章verilog語言結(jié)構(gòu)到門級的映射 第三章 使用DC進(jìn)行綜合

    《綜合與Design_Compiler》學(xué)習(xí)筆記——第一章綜合綜述 第二章verilog語言結(jié)構(gòu)到門級的映射 第三章 使用DC進(jìn)行綜合

    2023.6.25 2023.6.27 和之前學(xué)的芯動力mooc中很多內(nèi)容相似,這篇整理的邏輯更好些 將RTL代碼轉(zhuǎn)換到基于工藝庫的門級網(wǎng)表。一般分為如下三個步驟。 (1)邏輯級綜合 設(shè)計被描述成 布爾等式 的形式,觸發(fā)器、鎖存器這樣的基本單元采用元件例化(instantiate)的方式表達(dá)出來,下面是

    2024年02月12日
    瀏覽(23)
  • C語言學(xué)習(xí)筆記:數(shù)組

    C語言學(xué)習(xí)筆記:數(shù)組

    ?博文作者:煙雨孤舟 ?? 喜歡的可以 點贊 收藏 關(guān)注哦~~ ?? 作者簡介: 一個熱愛大數(shù)據(jù)的學(xué)習(xí)者 ?? 筆記簡介:作為大數(shù)據(jù)愛好者,以下是個人總結(jié)的學(xué)習(xí)筆記,如有錯誤,請多多指教! 目錄 ??????? 簡介 數(shù)組聲明 數(shù)組初始化 訪問數(shù)組元素 多維數(shù)組 二維數(shù)組

    2024年02月09日
    瀏覽(16)
  • C語言學(xué)習(xí)分享(第六次)------數(shù)組

    C語言學(xué)習(xí)分享(第六次)------數(shù)組

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:C語言學(xué)習(xí)分享? ? ??代碼倉庫:NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)更多C語言知識 ? ???? 啊~~,很久沒有更新C語言知識了,各位久等了,本篇文章在了解了數(shù)組的基本知識后, 著重于給大家實現(xiàn)兩個小游戲:三子棋和掃雷

    2024年02月03日
    瀏覽(26)
  • perl腳本語言學(xué)習(xí)1——基礎(chǔ)篇:變量、數(shù)組、哈希數(shù)組、循環(huán)、文件、函數(shù)

    2023.3.18 今天下載虛擬機把電腦磁盤內(nèi)容弄到亂七八糟,難受 發(fā)現(xiàn)每次學(xué)習(xí)遇到一個坎,感覺面前是一座大山,越過去之后又對前途充滿了希望 perl:practical extraction report language 實用提取和報表語言 從字面上看主要與文本處理相關(guān) 變量定義: my 存儲 數(shù)字、字符、字符

    2024年02月12日
    瀏覽(22)
  • 【C語言】從零開始學(xué)習(xí)數(shù)組

    【C語言】從零開始學(xué)習(xí)數(shù)組

    ??博客主頁:江池俊的博客 ?收錄專欄:C語言初階之路 ??其他專欄:數(shù)據(jù)結(jié)構(gòu)探索 ??代碼倉庫:江池俊的代碼倉庫 ?? 社區(qū):GeekHub社區(qū)?(歡迎大家加入與我一起探討學(xué)習(xí)經(jīng)驗) ?? 如果覺得博主的文章還不錯的話,請點贊??收藏?? 三連支持一下博主?? 目錄 一、一維數(shù)

    2024年02月15日
    瀏覽(17)
  • C語言學(xué)習(xí)day15:數(shù)組強化訓(xùn)練

    C語言學(xué)習(xí)day15:數(shù)組強化訓(xùn)練

    題目一: 稱體重:分別給10個值,來獲得最大值 思路: 定義數(shù)組,給數(shù)組內(nèi)賦10個值 第一個下標(biāo)的值與第二個下標(biāo)的值進(jìn)行比較 定義max,將比較得來的較大的值賦值給max 一直比較直到比較到最后一個下標(biāo),將得到的最大值賦值給max 代碼: 結(jié)果: 題目二:數(shù)組逆置 數(shù)組逆

    2024年02月21日
    瀏覽(19)
  • 前端學(xué)習(xí)C語言 - 數(shù)組和字節(jié)序

    本篇主要介紹: 一維二維數(shù)組 、 字符數(shù)組 、 數(shù)組名和初始化注意點 以及 字節(jié)序 。 初始化 有以下幾種方式對數(shù)組初始化: Tip :以上寫法創(chuàng)建的數(shù)組都是 不可變大小的 。 練習(xí)1 題目 : int a[5] = {1} ,請問 a 的每個值是多少? 輸出: 1 0 0 0 0 。 在C和C++中,當(dāng)我們創(chuàng)建數(shù)組

    2024年02月09日
    瀏覽(16)
  • C語言學(xué)習(xí)記錄——找數(shù)組中的鞍點

    C語言學(xué)習(xí)記錄——找數(shù)組中的鞍點

    目錄 C語言中 鞍點的定義? 代碼的實現(xiàn) 思路分析圖解? 指一個矩陣中,即該位置上的元素在該行上最大,在該列上最小。 一個二維數(shù)組可能沒有鞍點。 例如:1,2,3 ? ? ? ? ? ?4,5,6 ? ? ? ? ? ?7,8,9 該矩陣中,鞍點為3所在的位置。 即數(shù)組坐標(biāo)[ 0?] [ 2 ],在第一行第三

    2024年02月04日
    瀏覽(42)
  • C語言學(xué)習(xí)筆記——C語言結(jié)構(gòu)

    C語言是一種面向過程的結(jié)構(gòu)化的語言,同時具有高級語言和匯編語言的優(yōu)點 所有的C語言程序經(jīng)過編譯和連接之后才能被計算機執(zhí)行 頭文件是一種特殊的文件,記錄了很多可以直接引用頭文件然后使用的函數(shù),也可通過#define聲明函數(shù)、變量、宏等的定義 頭文件通常包含在源

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包