标签:const int void char return sizeof 排序 快速
qsort用于二维数组、字符串数组和数据结构数组排序
void qsort(void *arr, size_t n, size_t size, int (*Cmp)(const void *, const void *))// 一维数组 : 直接定义数组 int arr[] = {1, 3, 2}; int Cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; /* a、b分别指向arr1/arr2中某个元素 */ } qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), Cmp);
// 一维数组 : 动态数组 int *arr = (int *)calloc(8, sizeof(int)); int Cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; /* a、b分别指向arr1/arr2中某个元素 */ } qsort(arr, 8, sizeof(int), Cmp);
int Cmp1(const void *a, const void *b) { // 此处为了看起来清晰一些,定义m、n来取代a、b,这里可以看到,入参的是一维指针类型,也就是之前所说的arr1的某个元素,即以为指针 int *m = (int *)a; int *n = (int *)b; if (m[0] != n[0]) { return m[0] - n[0]; } else { return m[1] - n[1]; } }
int Cmp2(const void *a, const void *b) { // 与上面不同的是,这里入参的是二维指针,即arr2入参,重要!!! int *m = *(int **)a; int *n = *(int **)b; if (m[0] != n[0]) { return m[0] - n[0]; } else { return m[1] - n[1]; } } qsort(arr2, 10, sizeof(int *), Cmp2);
int Cmp1(const void *a, const void *b) { return strcmp((char *)a, (char *)b); } qsort(str1, sizeof(str1) / sizeof(str1[0]), sizeof(str1[0]), Cmp1);
char **words = (char **)calloc(n, sizeof(char *)); int Cmp(const void *a, const void *b) { char **a1 = (char **)a; char **b1 = (char **)b; return strcmp(*a1, *b1); } qsort(words, n, sizeof(words[0]), Cmp);
// int Cmp2(const void *a, const void *b) { return strcmp(*(char **)a, *(char **)b); } qsort(str2, sizeof(str2) / sizeof(str2[0]), sizeof(char *), Cmp2);
标签:const,int,void,char,return,sizeof,排序,快速 来源: https://www.cnblogs.com/mingyigoodluck/p/15235485.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。