| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> C语言冒泡排序进阶(模拟qsort函数) -> 正文阅读 |
|
[数据结构与算法]C语言冒泡排序进阶(模拟qsort函数) |
本文主要讲述了是如何理解冒泡排序算法以及将冒泡排序进一步优化,达到可以接近模拟qsort函数的目的。 下面看冒泡排序算法:
调试结果: 思路是调用了两个for循环嵌套进行排序,比较简单。
? ?我建立了一组结构体数组,然后我要根据结构体数组中的判断成员name的大小来进行排序,则我需要自己创建一个关于比较name中字符串大小的函数,返回值分别是>0和<=0。 然后调用qsort函数,传入函数: ? 这样就根据结构体成员中的name的大小来进行排序了 ? ? 这里想要利用前面的冒泡排序的思想去模拟一下qsort函数,虽然达不到快排的目的,但是能达到对任何类型传进来的数据进行排序。
第一个元素base指针,由于base是无类型的指针,所以可以接收任何类型的指针,然后再进行强制类型转换来进一步操作 第二个元素是需要排序的个数,只需要计算出个数就行 第三个元素是该传入类型的一组数据的单个元素所占字节数?,即用sizeof操作符来进行计算便可 这里在冒泡排序的第二重for循环里面的if条件判断语句这里进行修改,将上面第四个元素接收的cmp函数进行调用,并且强制类型转换base为char*然后进行+width(也就是得到每个该未知类型的元素的地址,(比如说传入整形数组,那么(char*)base+width就等于一个元素的地址加4,下一个元素便是(char*)base+8,也就是得到下一个整形元素然后进行比较大小。) 这里传入的width就是每一个元素的所占字节数,(也就是说传入类型是int就对4个字节里面进行一个字节一个字节的内容进行互换,若是结构体类型所占12个字节则对每相邻的两个元素所占的12个字节的内容进行一个字节一个字节的互换) 接下来就是模拟qsort函数时里面的第四个元素各类型cmp函数的创建。 ?
?结构体里面的字符串类型? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 17:40:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |