程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 若何應用VC庫函數中的疾速排序函數

若何應用VC庫函數中的疾速排序函數

編輯:關於C++

若何應用VC庫函數中的疾速排序函數。本站提示廣大學習愛好者:(若何應用VC庫函數中的疾速排序函數)文章只能為提供參考,不一定能成為您想要的結果。以下是若何應用VC庫函數中的疾速排序函數正文


函數原型:
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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved