qsort函数C语言编译器函数库自带的排序函数
头文件:stdlib.h
第一个参数:待排序数组首元素的地址
第二个参数:待排序数组元素的个数
第三个参数:待排序数组的每个元素的大小
第四个参数:函数指针(具体排序方法)
具体代码解析:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
struct stu
{
?? ?char name[20];
?? ?int age;
};
int e1 比 e2 大(返回大于0的数)
? ? ? e1 = e2 (返回0)
? ? e1 < e2 (返回小于0的数)
int?sort_stu_name(const void* e1 , const void* e2 )
{
?? ?return strcmp(((struct stu*)e1)->name,(((struct stu*)e2)->name));
}
void* 可以接收任意类型的数据? 但是不可进行运算(如*e1>*e2)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 因此需要强制类型转化
int main()
{
?? ?struct stu s[3] = { {"zbddd",30} , { "ddfaff",33}, { "dlfada",40}};
?? ?qsort(? ? ? ? ? ? ? ? ? ? ? ?s(首元素的地址)? ? ? ,? 3(有三个元素需要排序)? ?,sizeof(s[0])(元素的大小),sort_stu_name(具体比较方法));
}
第二个代码
#include <stdio.h>
#include <stdlib.h>
int sort_int( const void* e1 ,const void*e2 )
{
?? ?return *(int*)e1-*(int*)e2;
}
int main()
{
?? ?int arr[10] = { 2,3,4,5,1,6,7,8,10,9};
?? ?int i ?= 0 ;
?? ?qsort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(arr[0]),sort_int);
?? ?for( i = 0 ; i < 10 ; i++)
?? ?{
?? ??? ?printf("%d ",arr[i]);
?? ?}
?? ?return 0;
}