细讲qsort函数用法

本文详细介绍了C语言标准库中的qsort函数,用于对各种类型的数据进行排序。qsort函数接受一个指向要排序的数组、元素数量、元素大小以及一个比较函数作为参数。比较函数用于定义排序规则。文中通过整型、字符型、字符串以及结构体类型的排序示例,展示了如何自定义比较函数进行升序排列。
摘要由CSDN通过智能技术生成
  1. 🚩qsort函数介绍
  2. 🚩qsort函数使用方法

在这里插入图片描述

前言

✨上一期发的模仿qsort实现一个冒泡排序的通用算法
可能有一些小伙伴不会使用或者不了解qsort函数的使用,这一期带大家细讲一下qsort函数!


qsort函数介绍

qsort函数是C语言提供一个库函数,主要用于排序各种类型的数据,是一个通用的排序函数,排序内核思想使用的是快速排序。

头文件 - include<stdlib.h>

描述
C 库函数void qsort(void* base, size_t nitems, size_t size, int (*compar)(const void , const void)) 对数组进行排序

声明

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数

  • base – 指向要排序的数组的第一个元素的指针。
  • nitems – 由 base 指向的数组中元素的个数。
  • size – 数组中每个元素的大小,以字节为单位。
  • compar – 用来比较两个元素的函数。

返回值
该函数不返回任何值。


qsort函数使用方法

qsort要求提供一个自己定义的比较函数
⭐️比如一个整形数组进行排序

int arr[6]={3,2,5,4,1,6};
int cmp_int (const void* e1 , const void* e2)//注意参数形式是固定的
	{	//我们要进行强制类型转换
			int *e1=(int *)e1;
			int *e2=(int *)e2;
			return *e1-*e2;
	}
	qsort(arr,6,sizeof(arr[0]),cmp_int);
		//这里的sizeof(arr[0])也可直接写成4,前提知道是给int型排序

如果cmp_int返回值小于0(< 0),那么e1所指向元素会被排在e2所指向元素的前面,也就是升序
如果cmp_int返回值等于0(= 0),那么e1所指向元素与e2所指向元素的顺序不确定
如果cmp_int返回值大于0(> 0),那么e1所指向元素会被排在e2所指向元素的后面

⭐️比如对char类型排序

char arr[6];
int cmp_char(const void* e1 , const void* e2)  //参数格式固定
{
	//强制类型转换
    char* a = (char*)_a;    
    char* b = (char*)_b;
    return *a - *b;  
}

qsort(arr,6,sizeof(arr[0]),cmp_char); 
//同样这里sizeof(arr[0])也可直接写1,因为知道是char类型

⭐️对字符串类型

char arr[40][20];
int cmp_string(const void* e1 , const void* e2)  //参数格式固定
{
	return strcmp(((char*)e1), ((char*)e2));
}

qsort(arr,40,sizeof(arr[0]),cmp_string); 

⭐️对于结构体类型
你要确认根据什么排序,我这里示范就根据名字name进行排序

struct stu
{
		char six[20];
		char name[20];
		int age;	
}struct stu s[3] = { {"zhangsan", 30},{"lisi", 34},{"wangwu", 20} };
int cmp_name(const void* e1 , const void* e2)  //参数格式固定
{
	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int count=sizeof(s) / sizeof(s[0])
qsort(s, count, sizeof(s[0]), cmp_name);


在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小明的c++笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值