目录
1.简介
2.解析
声明
参数
3.示例
4.总结
5.更新日志
1.简介
qsort函数是C语言编译器自带的排序函数
头文件 #include <stdlib.h>
功能:排序
不返回任何值
2.解析
声明
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;
3.示例
①对一维数组排序
#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);
}
④结构体
4.总结
qsort函数还是挺经常用的,希望能够尽快熟练掌握
5.更新日志
2022.3.21 整理