简介
qsort主要是对数组或字符串按照一定的规则(升序/降序)进行排列的函数
函数原型
#include<stdlib.h>
void qsort(void*, size_t, size_t, int ( * )(const void * , const void * ))
1.第一个参数:需排列数组的地址
2.第二个参数:数组中的元素个数
3.第三个参数:每个元素所占字节的大小
如果是整形,该参数就可以直接写成sizeof(int)
4.第四个参数是一个函数的地址,直接用函数名来表示函数地址,这是一个什么样的函数呢?这个函数的返回值决定了到底是升序还是降序排列,下面的示例具体说明。
整形数组的升序排列
#include<stdio.h>
#include<stdlib.h>
int inc(const void* a, const void* b) {
return *(int*)a >*(int*)b?1:-1;
}
int main() {
int a[7] = { 2,1,4,7,34,54,8 };
qsort(a, 7, sizeof(int), inc);
for (int i = 0; i < 7; i++) {
printf("%d\n", a[i]);
}
return 0;
}
运行结果
其中,inc这个函数名是随意起的,并且一般像inc这个函数的实现都是像上面的代码一样,固定的形式,如果想要降序排列,只需吧inc函数体的return值中的a,b交换一下位置便可,也就是说,升序就返回1,降序就返回-1.
只需记住便可
既然都是固定的形式,那么类比,double类型的数组照葫芦画瓢就可以写出来了
double型数组排序
int inc(const void* a, const void* b) {
return *(double*)a > *(double*)b?1:-1;
}
int main() {
double a[7] = { 1.12,1.23,4.45,7.56,4.22,5.44,8.11 };
qsort(a, 7, sizeof(double), inc);
for (int i = 0; i < 7; i++) {
printf("%.2llf\n", a[i]);
}
return 0;
}
可以发现,只需把int的地方改成double便可
运行结果
char型数组排序
int inc(const void* a, const void* b) {
return *(char*)a > *(char*)b?1:-1;
}
int main() {
char a[7] = { 'b','a','d','f','e','c','g'};
qsort(a, 7, sizeof(char), inc);
for (int i = 0; i < 7; i++) {
printf("%c\n", a[i]);
}
return 0;
}
相应的改成char就行了
运行结果