qsort函数的介绍

发布时间:2024年01月19日

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;
}

文章来源:https://blog.csdn.net/wx20041102/article/details/135706645
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。