如何使用VC庫函數(shù)中的快速排序函數(shù)
函數(shù)原型:
void qsort(void *base,size_t num,size_t width,
int (__cdecl *compare )(const void *, const void *) );
第一個(gè)是數(shù)組地址,第二是數(shù)組大小,第三個(gè)是數(shù)組中每個(gè)元素的字節(jié)數(shù),最后一個(gè)是個(gè)函數(shù)指針,表示如何比較數(shù)組中的元素。
頭文件 #include <stdlib.h>
下面分別就int等整數(shù)數(shù)據(jù),double等浮點(diǎn)數(shù)據(jù),結(jié)構(gòu)體和類,按指定方式這四種情況進(jìn)行講解。
實(shí)例1、對int等整數(shù)數(shù)據(jù)進(jìn)行排序
int cmp(const void *x, const void *y)
{
return *(int*)x - *(int*)y;
}
qsort(a, MAXN, sizeof(a[0]), cmp);
MAXN為數(shù)組大小,下同
實(shí)例2、對double等浮點(diǎn)數(shù)進(jìn)行排序
int cmpDouble(const void *x, const void *y)
{
return (*(double*)x > *(double*)y ? 1 : -1);
}
qsort(a, n, sizeof(a[0]), cmpDouble);
實(shí)例3、對結(jié)構(gòu)體,類等復(fù)雜數(shù)據(jù)進(jìn)行排序
如
struct Student
{
char szName[30];
int nAge;
};
先對年齡排序,年齡相同再按姓名排序。
int cmpStudent (const void *x, const void *y)
{ //先作下指針轉(zhuǎn)換,再按要求比較
Student *pNodex = (Student*)x, *pNodey = (Student*)y;
if (pNodex->nAge != pNodey->nAge)
return pNodex->nAge - pNodey->nAge;
else
return strcmp(pNodex->szName, pNodey->szName);
}
qsort(a, n, sizeof(a[0]), cmpStudent);
實(shí)例4、按指定方式進(jìn)行排序。
如對只有大小寫字母的字符串"AajkuKdYUBCDwyz"進(jìn)行排序,要求大寫字母在前,小寫字母在后。
int cmp1(const void *x, const void *y)
{
char *pcx = (char*)x, *pcy = (char*)y;
bool flag1 = *pcx >= 'A' && *pcx <= 'Z';
bool flag2 = *pcy >= 'A' && *pcy <= 'Z';
if(flag1 == flag2) //如果都為大寫字母或都為小寫字母
return *pcx - *pcy;
else //否則,誰為大寫字母,誰的權(quán)值小。
return flag1 ? -1 : 1;
}
int main()
{
char szText[] = "AajkuKdYUBCDwyz";
qsort(szText, strlen(szText), sizeof(szText[0]), cmp1);
printf("%s\n", szText);
return 0;
}
- vc中SendMessage自定義消息函數(shù)用法實(shí)例
- 解析VC中創(chuàng)建DLL,導(dǎo)出全局變量,函數(shù)和類的深入分析
- 深入VC回調(diào)函數(shù)的使用詳解
- VC中SendMessage和PostMessage的區(qū)別
- VC++獲得當(dāng)前進(jìn)程運(yùn)行目錄的方法
- VC打印word,excel文本文件的方法
- VC文件目錄常見操作實(shí)例匯總
- VC讀配置文件實(shí)例
- VC++進(jìn)度條process Bar的用法實(shí)例
- VC++中內(nèi)存對齊實(shí)例教程
- VC實(shí)現(xiàn)五子棋游戲的一個(gè)算法示例
- VC++實(shí)現(xiàn)CStdioFile寫入及讀取文件并自動(dòng)換行的方法
- VC自定義消息響應(yīng)函數(shù)postmessage用法示例
相關(guān)文章
C++程序的五大內(nèi)存分區(qū)實(shí)例詳解
C++內(nèi)存區(qū)域,一般可分為棧內(nèi)存區(qū)、堆內(nèi)存區(qū)、全局/靜態(tài)內(nèi)存區(qū)、文字常量內(nèi)存區(qū)及程序代碼區(qū)5大分區(qū),本文就帶大家深刻的理解這5大內(nèi)存分區(qū),感興趣的可以了解一下2021-10-10有關(guān)C++繼承與友元、繼承與類型轉(zhuǎn)換詳解
下面小編就為大家?guī)硪黄嘘P(guān)C++繼承與友元、繼承與類型轉(zhuǎn)換詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01c/c++靜態(tài)庫之間相互調(diào)用的實(shí)戰(zhàn)案例
C++調(diào)用C的函數(shù)比較簡單,直接使用extern "C" {}告訴編譯器用C的規(guī)則去編譯C代碼就可以了,下面這篇文章主要給大家介紹了關(guān)于c/c++靜態(tài)庫之間相互調(diào)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例
這篇文章主要介紹了vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例,需要的朋友可以參考下2014-03-03C/C++程序開發(fā)中實(shí)現(xiàn)信息隱藏的三種類型
這篇文章主要介紹了C/C++程序開發(fā)中實(shí)現(xiàn)信息隱藏的三種類型的相關(guān)資料,需要的朋友可以參考下2016-02-02C/C++ 中堆和棧及靜態(tài)數(shù)據(jù)區(qū)詳解
這篇文章主要介紹了C/C++ 中堆和棧及靜態(tài)數(shù)據(jù)區(qū)詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04