国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

如何使用VC庫函數中的快速排序函數

2020-01-26 15:52:44
字體:
來源:轉載
供稿:網友

函數原型:
void qsort(void *base,size_t num,size_t width,
int (__cdecl *compare )(const void *, const void *) );

第一個是數組地址,第二是數組大小,第三個是數組中每個元素的字節數,最后一個是個函數指針,表示如何比較數組中的元素。

頭文件 #include <stdlib.h>
下面分別就int等整數數據,double等浮點數據,結構體和類,按指定方式這四種情況進行講解。

實例1、對int等整數數據進行排序

復制代碼 代碼如下:

int cmp(const void *x, const void *y)
{
 return *(int*)x - *(int*)y;
}
qsort(a, MAXN, sizeof(a[0]), cmp);

MAXN為數組大小,下同

實例2、對double等浮點數進行排序

復制代碼 代碼如下:

int cmpDouble(const void *x, const void *y)
{
 return (*(double*)x > *(double*)y ? 1 : -1);
}
qsort(a, n, sizeof(a[0]), cmpDouble);

實例3、對結構體,類等復雜數據進行排序

復制代碼 代碼如下:

struct Student
{
 char szName[30];
 int  nAge;
};

先對年齡排序,年齡相同再按姓名排序。
復制代碼 代碼如下:

int cmpStudent (const void *x, const void *y)
{   //先作下指針轉換,再按要求比較
 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);

實例4、按指定方式進行排序。
如對只有大小寫字母的字符串"AajkuKdYUBCDwyz"進行排序,要求大寫字母在前,小寫字母在后。
復制代碼 代碼如下:

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                  //否則,誰為大寫字母,誰的權值小。
  return flag1 ? -1 : 1;
}
int main()
{
 char szText[] = "AajkuKdYUBCDwyz";
 qsort(szText, strlen(szText), sizeof(szText[0]), cmp1);
 printf("%s/n", szText);
 return 0;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 旬阳县| 大荔县| 乌兰察布市| 乌苏市| 同心县| 凤台县| 宽城| 五寨县| 甘泉县| 广昌县| 玛纳斯县| 察雅县| 杂多县| 大邑县| 久治县| 雷山县| 叙永县| 抚远县| 镇坪县| 阿勒泰市| 桐乡市| 句容市| 北安市| 古蔺县| 大理市| 惠来县| 库尔勒市| 黄大仙区| 阳春市| 藁城市| 肇州县| 峨眉山市| 镇江市| 华安县| 唐河县| 南投市| 江安县| 恭城| 嘉兴市| 蓬溪县| 南宁市|