赞
踩
目录
qsort函数是C语言编译器自带的排序函数
头文件 #include <stdlib.h>
功能:排序
不返回任何值
void qsort(void * base,size_t num,size_t width,int(*compar)(const void *p1 ,const void *p2 ))
base 指针,指向要排序数组的第一个元素
求法: ①数组名(此时表示首元素的地址)
num base指向的数组中元素的个数
求法: ①直接传表示元素个数的变量/常量
② sizeof(array)/sizeof(array[0]) (数组大小除以首元素的大小)
width 数组中每个元素的大小(以字节为单位)
求法: ①直接传表示元素大小的常量
② sizeof(char)、sizeof(int).....
compar 用来比较两个元素的函数,即函数指针(回调函数)
函数声明 int(*compar)(const void *p1 ,const void *p2 )
参数 两个形参的类型必须是 const void *
说明:
传入的实参也为const void * ,在函数内部执行的时候,会将const void * 转换为实际所需要的类型
compar函数的返回值大小 | 描述 |
compar返回值小于0 | p1所指向的元素会排在p2指向的元素左边 |
compar返回值等于0 | p1所指向的元素与p2指向的元素顺序不确定 |
compar返回值大于0 | p1所指向的元素会排在p2指向的元素右边 |
例如:从小到大排序
- int compar(const void* a,const void* b)
- {
- return *(int*)a-*(int*)b;
- }
若从大到小 则 return *(int*)b-*(int*)a;
①对一维数组排序
- #include <stdio.h> //对一维数组进行排序
- #include <stdlib.h>
-
- int compar(const void* x, const void* y)
- {
- return *(int*)x - *(int*)y; //从小到大排序
- }
-
- int main()
- {
- int i, Num;
- int* array;
- scanf("%d", &Num); //输入元素个数
-
- array = (int*)malloc(Num * sizeof(int)); //为元素开辟空间
-
- for (i = 0; i < Num; i++)
- scanf("%d", (array + i)); //输入元素
-
- qsort(array, Num, sizeof(int), compar); //调用快排函数
-
- for (i = 0; i < Num; i++)
- printf("%d ", array[i]);
-
- free(array);
-
- return 0;
- }
②二维数组
- qsort(a,1000,sizeof(int)*2,comp);
-
- int compar(const void*a,const void*b)
-
- {
- return((int*)a)[0]-((int*)b)[0];
- }
③字符串
- int compar(const void*p1,const void*p2)
- {
- return strcmp((char*)p2,(char*)p1);
- }
④结构体
qsort函数还是挺经常用的,希望能够尽快熟练掌握
2022.3.21 整理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。