qsort函数的使用

一、qsort函数

qsort函数是一种排序函数,其头文件为<stdlib.h>

其原型为void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*))

其中int(__cdecl*compare)(const void*,const void*)表示一个函数指针,该指针指向的是一个参数为(const void*,const void*),返回值为int类型(写出两个元素的比较方式)的函数,这个函数需要由我们自己来完成。

二、qsort函数的使用

在qsort函数的使用中,最重要的是如何写出能够比较两个元素大小关系且返回一个int类型变量的函数:

在这里,我们使用int_cmp函数表示对整形元素的比较,char_cmp函数表示对char型元素的比较。str_cmp_name函数和str_cmp_age函数分别表示通过名字和年龄对结构体进行排序。

int类型:将void*类型变量强制转化为(int*)类型后解引用,将两个元素相减即可得到它们的大小关系。

char类型:将void*类型强制转化为(int*)类型后解引用,将其asciii码相减即可得到大小关系。

struct stu类型:比较名字:将void*类型强制转化为struct stu*类型,再调用出name,使用strcmp                                                函数,即可返回两个字符串的大小关系。

                          比较年龄:将void*类型强制转化为struct stu*类型,再调用出age,将两个age相                                                减,即可得到两个整型变量的大小关系。

三、代码实现

使用qsort函数对整型数组、字符串和结构体进行排序的代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stu {
	char name[20];
	int age;
}; s[2];
int int_cmp(void* e1, void* e2) {
	return *(int*)e1 - *(int*)e2;
}
int char_cmp(void* e1, void* e2) {
	return *(char*)e1 - *(char*)e2;
}
int str_cmp_name(void* e1, void* e2) {
	return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
int str_cmp_age(void* e1, void* e2) {
	return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}
int main() {
	int arr1[] = { 4,3,2,6,5,1,8,9,0,7 };
	char arr2[] = "badec";
	struct stu s[2] = { {"zhangsan",18 },{ "lisi", 22}};
	qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), int_cmp);
	qsort(arr2, sizeof(arr2) / sizeof(arr2[0]), sizeof(arr2[0]), char_cmp);
	qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), str_cmp_name);
	qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), str_cmp_age);
	return 0;
}

以下是代码的运行结果:

int:

                  

char:

                                

str-stu-name:

str-stu-age:

以上就是本篇博客全部内容,如果你觉得这篇博客对你有帮助的话,请记得点赞收藏加关注哦!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值