qsort(void *array,//这是个数组指针
szie_t length,//数组长度,
size_tiem_size,//数组每个元素的长度
int(*compar)(const coid *,const void *));
-
qsort()
函数通过调用传给它的比较器函数比较聊个元素的大小。
-
(*compar)
:用来比较数组中两项数据大小的函数指针。
-
const void *
:void*指针可以指向任何数据类型。使用前必须把它转化为具体类型。
qsort()函数的使用:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare_scores(const void* score_a, const void* score_b)
{
int a = *(int*)score_a;
int b = *(int*)score_b;
return a-b;
}
int compare_scores_desc(const void* score_a, const void* score_b)
{
return compare_scores(score_b,score_a);
}
int compare_names(const void* a,const void* b)
{
char** sa = (char**)a;
char** sb = (char**)b;
return strcmp(*sa,*sb);
}
int compare_names_desc(const void* a,const void* b)
{
return compare_names(b,a);
}
int main()
{
int scores[] = {543,323,32,554,11,3,112};
int i;
qsort(scores,7,sizeof(int),compare_scores_desc);
puts("These are the scores in order:");
for (int i = 0; i < 7; i++)
{
printf("Scores = %i\n",scores[i]);
}
char *names[]={"Karen","Mark","Brett","Molly"};
qsort(names,4,sizeof(char*),compare_names);
puts("These are the names in order:");
for (int i = 0; i < 4; i++)
{
printf("%s\n",names[i]);
}
return 0;
}
- 字符串数组中的每一项都是字符指针
(char*)
,当qsort()
调用比较器函数
时,会发送连个指向数组元素的指针,也就是说比较器函数接收到的是指向字符指针的指针,在C语言中就是char**。
- 当调用
strcmp()
时,要用strcmp(*a,*b,)
而不是strcmp(a,b)
,是因为a
,b
的类型是char**
,而strcmp()
函数需要接受的是char*
类型的值。
-
qsort()
不会创建新数组,而是在原数组上进行改动。
网友评论