IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> qsort函数详解 -> 正文阅读

[数据结构与算法]qsort函数详解

上篇文章,笔者讲解了冒泡排序的方法,原文链接为:一个典列来带领大家了解冒泡排序思想_念君思宁的博客-CSDN博客,有意者请参考一下!

最近笔者又浅学关于qsort函数的排序方法!下面且听笔者一一道来!

不知道大家对于qsort函数了解多少!可能仅仅限制在qsort函数是快速排序的函数,至于其他的就……额,不知道了!下面请看笔者对于qsort函数的讲解!但也不敢保懂!!

下面笔者是参考部分文献得来的内容!敬请欣赏:

qsort

void qsort (void* base, size_t num, size_t size,
            int (*compar)(const void*,const void*));
对数组的元素进行排序

对 所指向的数组元素进行排序,每个元素的长度为长,使用函数确定顺序。

此函数使用的排序算法通过调用指定函数并指向元素的指针作为参数来比较元素对。

该函数不返回任何值,但通过对所定义的数组元素进行重新排序来修改所指向的数组的内容。

原文内容为:

对于qsort我们在上面考研看出来,返回值为void 类型,即:可以排序(大小排序)任意类型的数据!

下面笔者就定义:进行简单的讲解!!

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

1.void* base :指向待排序数组的起始位置!

2.size_t num :待排序数组的元素个数!

3.size_t size :(所占字节)待排序数组的元素大小!

4.int (*compar)(const void*,const void*)) 这个就需要我们好好进行分析一下!

我们可以将int (*compar)(const void*,const void*))? 进行分开处理!

int (*compar)(const void*,const void*))
     
         函数:    (const void*,const void*) 
         指针:    *compar
         返回类型: int 

因此,对于int (*compar)(const void*,const void*)) ,我们可以概述为:比较两个元素大小的函数指针!

回想一下:对于不同的数据类型,有着不同的比较方式!所以……qsort显现出来独一无二的作用!

对于两个整型,运用关系运算符进行比较大小(>,<);

对于两个字符串,使用库函数strcmp进行比较大小;

对于两个结构体,也得制定比较方式!

因此我们可以用qsort函数来进行……比较 !

下面请看笔者用qsort函数测试排序整型数组!请看代码!

#include <stdlib.h>
#include <stdio.h>

void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

int cmp_int(const void* e1, const void* e2)
{
	if (*(int*)e1 > *(int*)e2)
		return 1;
	else if (*(int*)e1 < *(int*)e2)
		return -1;
	else
		return 0;
}

void test2()
{
	int arr[] = { 2,1,3,7,5,9,6,8,0,4 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print(arr, sz); //打印
}

int main()
{
	test2();
	return 0;
}

对于上述代码,笔者只对最重要的那一部分进行简单讲解!请读者注意一下!!显而易见的就是该段代码:

int cmp_int(const void* e1, const void* e2)
{
	if (*(int*)e1 > *(int*)e2)
		return 1;
	else if (*(int*)e1 < *(int*)e2)
		return -1;
	else
		return 0;
}

对于: *(int*)e1 与? *(int*)e2; 我们再定义e1与 e2的时候,是定义的void(空类型),所以在使用之前,先将e1与 e2通过? (int*)e1 与? (int*)e2 强制类型转换为: int* 类型!然后在进行解引用操作!

对于在该段代码里面的? if 语句的内容,可以更改为:retrun? (*(int*)e1? -? *(int*)e2);? (升序)(要是想要降序,则可以对调一下)

原因在于:

?qsort函数的返回值为int整型!!

对于上述代码的运行结果为:

对于这篇文章,笔者所写内容大致到此结束!!有不同想法的读者请与笔者进行私聊!!

感激!!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:14:52  更:2022-09-15 02:15:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:25:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码