广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言库函数中qsort()的用法
  • 166
分享到

C语言库函数中qsort()的用法

2024-04-02 19:04:59 166人浏览 泡泡鱼
摘要

目录(一)void*  的指针类型是什么?(二)void qsort(void*, size_t, size_t, int ( * )(const void * ,  const v

qsort是库函数提供的一种排序方法,我们就简单1了解一下怎么去用,而不去深究它的库函数是怎么写的

qsort是库函数中提供的一种能排序任何类型的数据的一种排序方法,思想是quick sort(快速排序),今天我听鹏哥讲指针,刚好引入了这一点,我就趁热打铁,总结一下该排序的用法

(一)void*  的指针类型是什么?

void*类型的指针是能接受任何数据类型的地址,但是void*的指针类型是不能进行解引用操作的,也不能进行加减整数的操作,因为void*不知道它会占用多少个字节


#include <stdio.h>
int main()
{
int a=10;
char ch='w';
void* p=&a;
p=&ch;
return 0;
}

(二)void qsort(void*, size_t, size_t, int ( * )(const void * ,  const void *  ))  该怎么使用该库函数?

我们先来看看qsort()内部有些什么参数,参数类型是什么,该怎么用。

void qsort(void* base, size_t, size_t, int ( * )(const void * ,  const void *  ))

可以看出共有四个参数

1.void1* base:待排序数组的首地址,可直接输入待排序数组名,也可使用指针指向该数组

2.size_t num:数组的长度,假如有数组int arr[ ]用sz=sizeof(arr)/sizeof(arr[0])来计算数组的长度

3.size_t width:数组中的元素所占字节,可用sizeof(arr[0])来计算单个元素的字节数

4.


int (*cmp)(const void* e1,const void* e2)
{
return  *(int*)e1 - *(int*)e2;//因为void*类型的指针不能进行加减操作,所以先将e1,e2进行强制类型转换,转为int*,然后对其进行解引用
//不同的情形可以根据不同的比较方式来写入这个函数
//例如,字符串进行比较的时候,可以引用strcmp()这个函数
}

:从这个形式可看出这是一个函数指针类型的参数,意味着将要调用一个函数,而这个函数在库函数中表示进行排序的方式

这里简单解释一下这个函数指针的意义

int 表示返回的是一个int类型的值

cmp表示函数名,*cmp表示指向这个函数

(const void* e1,const void* e2)这里·的e1,e2表示将要进行比较的两个元素,然后将两个元素的地址传到函数里,const表示无法修改指针指向的值

(三)使用qsort()来排序不同类型的数据

1.整型


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
int main()
{
	int arr[10] = { 3,4,1,2,7,8,9,5,6,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
 
	return 0;
}

2.浮点型


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int cmp_float(const void* e1, const void* e2)
{
	return (int)(*(int*)e1 - *(int*)e2);
    
}
int main()
{
	float arr[6] = { 2.0,2.3,4.5,5.0,8.0,9.0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_float);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%.2f ", arr[i]);
	}
	return 0;
}

3.结构体数据类型(数字,字符串)

下面我创建了一个机构体,我先以结构体中年龄排序


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
 
struct stu
{
	char name[20];
	int age;
	char sex[10];
};
int cmp_stu_by_age(const void* e1, const void* e2)//按年龄排序
{
	return ((struct stu*)e1)->age- ((struct stu*)e2)->age;
}
int main()
{
	struct stu s[3] = { {"zhangsan",30,"man"},{"lisi",20,"man"},{"ruhua",18,"woman"}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
	int i;
	for (i = 0; i < sz; i++)
	{
		printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
	}
	return 0;
}

 然后以姓名排序


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
	char name[20];
	int age;
	char sex[10];
};
int cmp_stu_by_name(const void* e1, const void* e2)
{
	return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
 
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
//	return ((struct stu*)e1)->age- ((struct stu*)e2)->age;
//}
int main()
{
	struct stu s[3] = { {"zhangsan",30,"man"},{"lisi",20,"man"},{"ruhua",18,"woman"}};
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
	int i;
	for (i = 0; i < sz; i++)
	{
		printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
	}
	return 0;
}

 总结:

今天的qsort就这样了,关键在于

int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}这一部分的书写与理解,然后就是孰能生巧,多练习就会知道怎么用了

到此这篇关于C语言库函数中qsort()的用法的文章就介绍到这了,更多相关C语言qsort()内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言库函数中qsort()的用法

本文链接: https://www.lsjlt.com/news/160731.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言库函数中qsort()的用法
    目录(一)void*  的指针类型是什么?(二)void qsort(void*, size_t, size_t, int ( * )(const void * ,  const v...
    99+
    2022-11-12
  • C语言中关于库函数 qsort 快排的用法
    目录前言一、库函数(qsort)的含义二、(qsort)函数的实现方式,话不多说,请看。1. 第一个参数2. 第二个参数3. 第三个参数4. 第四个参数1). 函数的参数2). 这第...
    99+
    2022-11-12
  • C语言库函数qsort如何使用
    本篇内容介绍了“C语言库函数qsort如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、回调函数C语言库函数中的qsort的是一个回...
    99+
    2023-07-02
  • C语言库函数qsort的使用详解
    目录一、回调函数二、库函数qsort三、使用qsort排序整型数组四、使用qsort排序结构体1、使用qsort排序结构体中的字符成员2、使用qsort排序结构体中的整型成员五、基于...
    99+
    2022-11-13
  • C语言qsort函数使用方法详解
    目录1.qsort函数1.1qsort函数功能1.2参数介绍2.qsort函数功能测试3.冒泡排序思想模拟实现qsort1.qsort函数 void qsort (void* bas...
    99+
    2022-11-13
  • C语言qsort()函数的使用方法详解
    目录前言1.参数含义1.首元素地址base2.元素个数num3.元素大小size4.自定义比较函数compar2.使用方式1.头文件2.compar的实现3.整体代码总结前言 &nb...
    99+
    2022-11-13
  • C语言中回调函数和qsort函数的用法详解
    目录回调函数指向函数指针数组的指针qsort(qulick sort)-库函数回调函数 通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调...
    99+
    2022-11-13
  • C语言标准库函数qsort怎么使用
    C语言标准库函数qsort可以用来对数组进行快速排序。qsort函数的原型如下:```cvoid qsort(void *base,...
    99+
    2023-08-25
    C语言 qsort
  • C语言中qsort函数的介绍与用法实例
    目录一.qsort函数是什么 二.使用qsort排序-以升序为例1.整形数组排序2.字符数组排序3.字符指针数组排序4.结构体数组排序5.浮点型数组排序三.使用冒泡排序思想...
    99+
    2022-11-12
  • C语言的qsort()函数如何使用
    本文小编为大家详细介绍“C语言的qsort()函数如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的qsort()函数如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言 qsort...
    99+
    2023-06-30
  • C语言之qsort函数详解
    目录一.qsort函数原型二.qsort常见的几种比较函数1.int类型的排序2.double类型的排序3.char类型的排序4.字符串的排序:1.按首字母排序2.按字符串长度排序:...
    99+
    2022-11-12
  • C语言qsort函数算法性能测试
    qsort 是 C 语言标准库中的一个排序函数,其性能(即它的运行速度)主要取决于比较和交换元素的次数。比较和交换元素的次数又主要取决于输入数组的大小和分布。以下是一个简单的 qsort 性能测试的例子,你可以复制这个代码,然后运行它以查看...
    99+
    2023-12-09
    C语言 qsort函数
  • C语言标准库函数qsort(快速排序函数)
    qsort函数是C语言标准库中提供的一个快速排序函数。它的函数原型如下:```cvoid qsort(void *base, siz...
    99+
    2023-09-23
    C语言
  • C语言之qsort函数怎么使用
    在C语言中,可以使用qsort函数对数组进行排序。qsort函数的原型如下:```cvoid qsort(void *base, s...
    99+
    2023-08-12
    C语言 qsort
  • 关于C语言qsort函数详解
    目录C语言qsort函数详解一.qsort函数是什么 二.使用qsort排序-以升序为例1.整形数组排序2.字符数组排序3.字符指针数组排序4.结构体数组排序5.浮点型数组...
    99+
    2022-11-12
  • C语言库中函数qsort及bsearch快速排序算法怎么用
    这篇文章给大家分享的是有关C语言库中函数qsort及bsearch快速排序算法怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。qsortqsrot 就是C语言库函数中的快速排序函数,对数组,结构体都可以实现快...
    99+
    2023-06-29
  • C语言详细讲解qsort函数的使用
    目录qsort1.int型2.float型3.struct型qsort 功能:Performs a quick sort.(快速排序)参数:void qsort( void *bas...
    99+
    2022-11-13
  • C语言中qsort函数用法及用冒泡排序实现
    目录一、qsort函数简介二、qsort函数的使用1.整型数组排序2.字符串排序3.字符串长度排序4.浮点型数组排序5.结构体类型排序三、冒泡排序实现qsort函数的功能1.冒泡排序...
    99+
    2022-11-13
    C语言 qsort函数使用 C语言 qsort 冒泡排序 C语言 qsort
  • C语言中关于库函数 qsort 的模拟实现过程
    目录前言一、qsort函数二、qsort函数实现思路1. 底层原理2. 函数传参1). 第一个参数2). 第二个参数3). 第三个参数4). 第四个参数三、局部函数实现四、全部代码汇...
    99+
    2022-11-12
  • 一文带你学会C语言中的qsort函数
    目录铺垫知识使用qsort函数进行整型数组的排序使用qsort函数进行浮点型数组的排序使用qsort函数进行结构体数组的排序铺垫知识 qsort函数 参数类型  ...
    99+
    2022-12-21
    C语言 qsort函数 C语言 qsort
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作