资讯专栏INFORMATION COLUMN

qsort()函数详解

LiveVideoStack / 1839人阅读

摘要:函数详解函数原型函数的作用及用法函数的参数函数实例排序一个整型数组排序一个结构体用冒泡排序模拟一个函数函数原型函数的作用及用法函数的功能是对数组进行排序,数组有个元素,每个元素大小为可以排序数字,字符,结构体等多种类型


qsort函数原型

  • void qsort( void * base, size_t num, size_t width, int (__cdecl * compare )(const void * elem1, const void * elem2 ) );

qsort函数的作用及用法

  • qsort()函数的功能是对数组进行排序,数组有num个元素,每个元素大小为width
  • 可以排序数字,字符, 结构体等多种类型

qsort函数的参数

  • base: 目标数组
  • num: 数组大小
  • width: 数组元素的大小
  • compara:比较函数

qsort函数实例

qsort排序一个整型数组

  • 参考代码如下:
#include #include //用于比较的函数int cmp_by_num(const void* e1, const void* e2){	return *(int*)e1 - *(int*)e2;}void Print(int* p, size_t sz){	size_t i = 0;	for (i = 0; i < sz; i++)	{		printf("%d ", *(p + i));	}	printf("/n");}int main(){	int arr[] = { 2,6,3,5,8,4,7,1,2,0,10,30 };	size_t sz = sizeof(arr) / sizeof(arr[0]);	qsort(arr, sz, sizeof(arr[0]), cmp_by_num);	Print(arr, sz);}

qsort排序一个结构体

  • 参考代码如下:
#include #include struct Stu{	char name[20];	int age;};int cmp_by_name(const void* e1, const void* e2){	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);}void Print(struct Stu* p, int sz){	int i = 0;	for (i = 0; i < sz; i++)	{		printf("%s/t%d/n", p[i].name, p[i].age);	}}int main(){	struct Stu s[3] = {		{"张三", 15},		{"李四", 20},		{"王五", 18}	};	size_t sz = sizeof(s) / sizeof(s[0]);	qsort(s, sz, sizeof(s[0]), cmp_by_name);	Print(s, sz);}

用冒泡排序模拟一个qsort函数

#include #include //用于比较的函数int cmp_by_num(const void* e1, const void* e2){	return *(int*)e1 - *(int*)e2;}void Swap(char* e1, char* e2, size_t width){	size_t i = 0;	for (i = 0; i < width; i++)	{		char tmp = *e1;		*e1 = *e2;		*e2 = tmp;		e1++;		e2++;	}}void BubbleSort(void* base, size_t num, size_t width, int (*cmp)(const void*, const void*)){	size_t i = 0;	for (i = 0; i < num - 1; i++)	{		size_t j = 0;		for (j = 0; j < num - 1 - i; j++)		{			if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0)			{				Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);			}		}	}}void Print(int* p, size_t sz){	size_t i = 0;	for (i = 0; i < sz; i++)	{		printf("%d ", *(p + i));	}	printf("/n");}int main(){	int arr[] = { 2,6,3,5,8,4,7,1,2,0,10,30 };	size_t sz = sizeof(arr) / sizeof(arr[0]);	BubbleSort(arr, sz, sizeof(arr[0]), cmp_by_num);	Print(arr, sz);}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/118805.html

相关文章

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

    摘要:参数含义上图是函数各个参数的含义,让我们一个个来看。使用方式头文件要使用函数我们首先需要引用一个头文件的实现函数给函数规定了特定的参数。因此我们设计函数时要严格遵守其参数设定。 目录 1.参数含义 1.首元素地址base 2.元素个数num 3.元素大小size 4.自定义比较函数compa...

    wangym 评论0 收藏0
  • C语言-qsort函数详解

    摘要:目录一函数是什么二使用排序以升序为例关于型指针整形数组排序字符数组排序字符指针数组排序结构体数组排序浮点型数组排序三使用冒泡排序思想模拟实现函数什么是冒泡排序冒泡排序代码使用冒泡排序思想模 目录 一.qsort函数是什么  二.使用qsort排序-以升序为例       关于void*型指针...

    Airmusic 评论0 收藏0
  • 怎么样才能做到对多种数据类型排序?C语言快速排序——qsort函数及其模拟实现

    摘要:我们以冒泡排序为例,模拟实现函数。交换每单位字节对于的二进制序列这样,冒泡排序就能排序多种数据类型,模拟实现了函数,当然也可以使用其他的排序方法模拟实现函数。 ⭐️...

    alphahans 评论0 收藏0
  • C语言进阶:指针进阶续

    摘要:故使用无具体类型,又称通用类型,即可以接收任意类型的指针,但是无法进行指针运算解引用,整数等。求指针所占字节而不是解引用访问权限大小。数组就是整个数组的大小,数组元素则是数组元素的大小,指针大小都为。 ...

    ingood 评论0 收藏0

发表评论

0条评论

LiveVideoStack

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<