C语言qsort()函数的使用方法详解

目录
  • 前言
  • 1.参数含义
    • 1.首元素地址base
    • 2.元素个数num
    • 3.元素大小size
    • 4.自定义比较函数compar
  • 2.使用方式
    • 1.头文件
    • 2.compar的实现
    • 3.整体代码
  • 总结

前言

qsort()函数(quick sort)是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。

1.参数含义

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

上图是qsort函数各个参数的含义,让我们一个个来看。

1.首元素地址base

我们要排序一组数据,首先我们需要找到这组数据在哪,因此我们直接将首元素的地址传给qsort函数来确定从哪开始排序。

2.元素个数num

我们知道了从哪开始,也要知道在哪结束才能确定一组需要排序的数据,但是我们不方便直接将结尾元素的地址传入函数,因此我们将需要排序的元素的个数传给qsort函数来确定一组数据。

3.元素大小size

我们知道qsort函数能排序任意数据类型的一组数据,因此我们用void*类型的指针来接收元素,但是我们知道void*类型的指针不能进行加减操作,也就无法移动,那么在函数内部我们究竟用什么类型的指针来操作变量呢?我们可以将void*类型的指针强制类型转换成char*类型的指针后来操作元素,因为char*类型的指针移动的单位字节长度是1个字节,我们只需要再知道我们需要操作的数据是几个字节就可以操作指针从一个元素移动到下一个元素,因此我们需要将元素大小传入qsort函数。

4.自定义比较函数compar

我们需要告诉qsort函数我们希望数据按照怎么的方式进行比较,比如对于几个字符串,我们可以比较字符串的大小(strcmp),也可以比较字符串的长度(strlen),因此我们要告诉qsort函数我们希望的比较方式,我们就需要传入一个比较函数compar就简写为cmp吧。

2.使用方式

1.头文件

要使用qsort函数我们首先需要引用一个头文件<stdlib,h>

#include <stdlib.h>

2.compar的实现

qsort函数给cmp函数规定了特定的参数。因此我们设计cmp函数时要严格遵守其参数设定。

int compar (const void* e1, const void* e2);

如果你要比较的数据是整形:

int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}

如果你要比较的数据是浮点型:

int cmp_float(const void* e1, const void* e2)
{
	return (int)(*(float*)e1 - *(float*)e2);
}

如果你要比较的是字符串的大小:

int cmp_str_len(const void* e1, const void* e2)
{
	return strlen((char*)e1)-strlen((char*)e2);
}

如果你要比较的是字符串的长度:

int cmp_str_len(const void* e1, const void* e2)
{
	return strlen((char*)e1)-strlen((char*)e2);
}

如果你要比较的数据是结构体变量:

int cmp_by_age(const void*e1, const void*e2)
{
	return (int)(((stu*)e1)->weight - ((stu*)e2)->weight);
}

需要注意的是:返回结果一定要确保是整形,如果不是一定要强制类型转换成整形!

3.整体代码

快速排序结构体变量示例:

#include <stdlib.h>
typedef struct stu
{
	//char name;
	int age;
	float weight;
	double hight;
}stu;
int cmp_by_age(const void*e1, const void*e2)
{
	return (int)(((stu*)e1)->weight - ((stu*)e2)->weight);
}
int main()
{
	stu class1[3] = { {17,185.5,190.8}, {16,160.9,200.7}, {18,120.3,150.5} };
	int sz = sizeof(class1) / sizeof(class1[0]);
	int i;
	qsort(class1, sz,sizeof(class1[0]), cmp_by_age);
	for (i = 0; i < 3; i++)
	{
		printf("%.1f\n", class1[i].weight);
	}
	return 0;
}

总结

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

(0)

相关推荐

  • C语言 使用qsort函数来进行快速排序

    目录 前言 qsort的简单介绍 用qsort实现一个整形类型的排序 用qsort函数实现结构体的排序 qsort函数的实现 前言 今天分享一个库函数 介绍qsort的使用及实现方法 他可以实现不限于整形.浮点型.字符型.自定义等类型的排序 qsort的简单介绍   qsort 头文件 #include <stdlib.h> 格式 void qsort(void* base,size_t num,size_t width,int(__cdecl*compare(const void*,cons

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

    目录 (一)void*  的指针类型是什么? (二)void qsort(void*, size_t, size_t, int ( * )(const void * ,  const void *  ))  该怎么使用该库函数? (三)使用qsort()来排序不同类型的数据  总结: qsort是库函数提供的一种排序方法,我们就简单1了解一下怎么去用,而不去深究它的库函数是怎么写的 qsort是库函数中提供的一种能排序任何类型的数据的一种排序方法,思想是quick sort(快速排序),今天我听

  • C语言中qsort函数的介绍与用法实例

    目录 一.qsort函数是什么 二.使用qsort排序-以升序为例 1.整形数组排序 2.字符数组排序 3.字符指针数组排序 4.结构体数组排序 5.浮点型数组排序 三.使用冒泡排序思想模拟实现qsort函数 1.什么是冒泡排序: 2.冒泡排序代码 3. 使用冒泡排序思想模拟实现qsort函数 总结 一.qsort函数是什么 我们可以使用  搜索库函数网址或者MSDN软件进行查找. qsort()函数:快速排序的函数  -引用stdlib.h头文件 参数说明: void qsort ( void

  • C语言中qsort函数的用法实例详解

    C语言中qsort函数的用法实例详解 快速排序是一种用的最多的排序算法,在C语言的标准库中也有快速排序的函数,下面说一下详细用法. qsort函数包含在<stdlib.h>中 qsort函数声明如下: void qsort(void * base,size_t nmemb,size_t size ,int(*compar)(const void *,const void *)); 参数说明: base,要排序的数组 nmemb,数组中元素的数目 size,每个数组元素占用的内存空间,可使用si

  • C语言中关于库函数 qsort 的模拟实现过程

    目录 前言 一.qsort函数 二.qsort函数实现思路 1. 底层原理 2. 函数传参 1). 第一个参数 2). 第二个参数 3). 第三个参数 4). 第四个参数 三.局部函数实现 四.全部代码汇集 五.总结 前言 我们在上一篇博客讲解了库函数qsort的使用,今天我为大家带来qsort的模拟实现.上一篇博客这个库函数的阅读链接:C语言中关于库函数 qsort 快排的用法 其实有人会问,我明明已经掌握了库函数qsort的使用方法,为何还要去写模拟实现,其实啊,学好一个东西,不仅仅只是会用

  • 关于C语言qsort函数详解

    目录 C语言qsort函数详解 一.qsort函数是什么 二.使用qsort排序-以升序为例 1.整形数组排序 2.字符数组排序 3.字符指针数组排序 4.结构体数组排序 5.浮点型数组排序 三.使用冒泡排序思想模拟实现qsort函数 1.什么是冒泡排序 2.冒泡排序代码 3. 使用冒泡排序思想模拟实现qsort函数 C语言qsort函数详解 一.qsort函数是什么 我们可以使用  搜索库函数网址或者MSDN软件进行查找. qsort()函数:快速排序的函数  -引用stdlib.h头文件 参

  • C语言快速排序函数用法(qsort)

    本文实例为大家分享了C语言快排函数用法,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> struct student { int id; char name[12]; char sex; }; int compare(const void* a,const void* b)//基本数据类型排序 { return *(char*)a-*(char*)b;//从小到大 //取值/

  • C语言之qsort函数详解

    目录 一.qsort函数原型 二.qsort常见的几种比较函数 1.int类型的排序 2.double类型的排序 3.char类型的排序 4.字符串的排序: 1.按首字母排序 2.按字符串长度排序: 总结 一.qsort函数原型 qsort 功 能: 使用快速排序例程进行排序,这个函数是根据二分法写的,其时间复杂度为n*log(n) #include<stdlib.h> void qsort(void *base, int nelem, int width, int (*fcmp)(const

  • C语言中qsort函数用法实例小结

    本文实例汇总了C语言中qsort函数的常见用法,非常具有实用价值.分享给大家供大家参考.具体分析如下: C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序. 一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二.对char类型数

  • C语言中关于库函数 qsort 快排的用法

    目录 前言 一.库函数(qsort)的含义 二.(qsort)函数的实现方式,话不多说,请看. 1. 第一个参数 2. 第二个参数 3. 第三个参数 4. 第四个参数 1). 函数的参数 2). 这第四个参数的重点 三.函数实现 四.总结 前言 我也只是一个奋斗的程序猿,仅以此篇文章,作为我学习的见证,可能我的文采不好,有时候讲的词不达意,但我尽力去做好我想做的这些事情,如果此篇文章能够给各位读者带来一定的认识,那自然是最好的.若文章中有鄙人讲错了的,欢迎评论区指点.谢谢!!! 一.库函数(qs

随机推荐