<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這是基於qsort()函數進行的簡單排序。(附帶其他型別的陣列使用qsort()進行的排序)
基於qsort()函數進行的排序最有用的莫過於在此對於結構體陣列進行排序了。此外,若能結合函數指標,更是能夠實現“想降就降,想升就升”的美好局面。
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );(來源msdn)
base:傳過去的陣列
num:陣列中元素的個數
width:陣列中每個元素有多大
compare():此函數指標是需要自己實現的、根據什麼規則進行的排序函數
須根據需要對於引數進行指標型別的轉化。
若對字元型陣列進行排序,那就轉換成字元型指標。(char*)
若對整型陣列進行排序,那就轉換成整型指標。(int*)
若對浮點型陣列進行排序,那就轉換成浮點型指標。(float*)
若對結構體陣列的某項進行排序,那就轉換成結構體指標。(struct xxx*)
返回的是兩個結構體指標解除參照後相比較的結果。
1)升序實現
程式碼如下(範例):
int Ascend(const void* p1, const void* p2) { const stu* x = p1; const stu* y = p2; // 對於結構體進行二級排序: // 如果年齡相等,誰成績高誰在前面 if (x->age == y->age) { return (x->score < y->score); } else { return (x->age < y->age); } }
2)降序實現
程式碼如下(範例):
int Descend(const void* p1, const void* p2) { const stu* x = p1; const stu* y = p2; // 對於結構體進行二級排序: // 如果年齡相等,誰成績高誰在前面 if (x->age == y->age) { return (x->score < y->score); } else { return (x->age < y->age); } }
返回的是兩個int指標解除參照後相減的結果。(用三目運運算元+大於小於號也可以)
為什麼不直接返回a>b(a<b)?
如下圖:因為qsort()在判斷時是需要判斷兩個引數誰大誰小,是需要一個正數或者負數的,但是直接返回a>b(a<b)的話,這個表示式的值只有0和非0,非0會被認為是相等,從而不進行交換。
1)升序實現
程式碼如下(範例):
void ArrComp(const void* p1, const void* p2) { const int* x = p1; const int* y = p2; return *x - *y; }
2)降序實現
程式碼如下(範例):
void ArrDescend(const void* p1, const void* p2) { const int* x = p1; const int* y = p2; return *y - *x; }
返回的是兩個float指標解除參照相減的結果,使用三目運運算元進行判斷(目的是為了判斷大小後有個正負)。
1)升序實現
程式碼如下(範例):
void FloatArrAscend(const void* p1, const void* p2) { const float* x = p1; const float* y = p2; return *x > *y ? 1 : -1; }
2)降序實現
程式碼如下(範例):
void FloatArrDescend(const void* p1, const void* p2) { const float* x = p1; const float* y = p2; return *y < *x ? 1 : -1; }
qsort()函數原始碼在c庫中使用的是快排進行的排序函數,結合函數指標,可以實現快速地升、降序的排序。
到此這篇關於C語言對結構體陣列按照某項規則進行排序的實現過程探究的文章就介紹到這了,更多相關C語言陣列排序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45