今日份学习“qsort”函数
前言:
针对一个数组的元素进行排序,我们可以想到冒泡排序法,且如果将该排序法专门写入一个函数,需排序的数组调入其中是不是方便很多呢?且如果要实现这样的函数,我们需考虑哪些问题呢?(可以自己先想一想再往下看哦)
一,实现条件
C语言中“qsort”函数便是能实现各种数组排序的函数,来看他的实现条件
1,返回值:qsort函数首先是无返回值的
2,void* base:接收一个数组地址,为什么是空类型呢?因为该函数的创建者他并不知道使用者将会使用什么类型的数组且设置为空类型指针以便于接收任意类型的地址。
3,size_t num:数组的元素个数,以无符号整型的方式来接收使用者传递过来的数组个数,首先确保数组个数不能是负数。
4,size_t size:数组元素的大小,同样以无符号整型的方式接收使用者传递过来的数组元素的大小,且单位是字节
5,int (*compar)(const void*,const void*):数组元素的比较方式,这是整函数中最核心的部分,我们要比较两元素的大小,首先确定其元素是什么类型,如果是整型可以用“><”的方式进行比较,如果是字符型则需要借用“strcmp”函数的返回值进行比较且以及其它各种类型都有其各种的比较方法。
所以qsort函数该参数部分就是接收使用者自己先创建其数组元素的比较方法函数,再将其函数指针作为参数进行传导。
特别声明一点:使用者创建的比较函数必须按照:
int (*)(const void*,const void*)
的格式进行创建
以下便是官方的解释条件:
二,使用方法
了解了qsort的使用格式,接下来我们试着去使用该函数。
1,创建一个数组:int arr[]={9,8,3,7,1,6,8,2,1,0};
2,计算数组长度:size_t num=sizeof(arr)/sizeof(arr[0]);
3,计算元素大小:size_t size=sizeof(arr[0]);
4,创建比较函数:
因为我们的数组是整型,则需创建整型大小的比较方式
且按照int (*)(const void*,const void*)
的格式进行创建
若返回值大于0(e1>e2),返回值小于0(e1<e2),返回值为0(e1==e2)
//创建整型比较函数
int compar (const void*e1,const void*e2)
{
//整型的比较方式
return (*(int*)e1-*(int*)e2);
}
5,代入qsort函数:qsort(arr,num,size,compar);
6,实现结果:
使用qosrt函数引用头文件<stdlib.h>
#include<stdio.h>
#include<stdlib.h>
int compar(const void* e1, const void* e2)
{
//整型的比较方式
return (*(int*)e1 - *(int*)e2);
}
int main()
{
int arr[] = { 9,8,3,7,1,6,8,2,1,0 };//创建数组
size_t num = sizeof(arr) / sizeof(arr[0]);//数组长度
size_t size = sizeof(arr[0]);//元素大小
qsort(arr, num, size, compar);//代入qsort
for (int i = 0; i<(int)num; i++)//打印
{
printf("%d ", arr[i]);
}
return 0;
}
你学废了嘛
标签:arr,int,void,qsort,char,数组,排序,万能,size From: https://blog.51cto.com/u_15993084/6149367