如何用冒泡排序模拟实现qsort函数

2 篇文章 0 订阅
1 篇文章 0 订阅

近期通过学习,我认识了C语言中第一个排序方式,也就是冒泡排序。Bubble_sort(八波欧嗦特e~),

今天呢,我将向大家介绍冒泡排序以及怎么用它实现qsort函数。


那么这个时候肯定会有小伙伴会好奇了,为什么它要叫冒泡排序呢?它真的会冒泡泡吗?

它当然不会冒泡泡,冒泡排序的算法名称的由来就是因为在排序的过程中,按照排序规则(升序或者降序),越小或者越大的元素会经过交换之后慢慢 “浮” 到序列的顶端,就如同水中的气泡一样最终会浮到顶端一样,所以起名为 “冒泡排序”。

1.要想实现一个冒泡排序函数,首先我们得知道它需要用到哪些参数。

2.下面是函数得具体实现

那么细心得小伙伴就要问了,你这个count有什么用啊?

在第一个for循环下面int一个count并赋值位0来假设我们的数组已经排好序了,如果在第二个for循环走完第一趟之后都没有交换就说明我们的假设成立,则跳出循环,反之则继续执行。是不是很巧妙呢,通过这种方式可以大大优化我们代码,来减小不必要的运算。

下面来看看我们代码的效果:

但,很遗憾的是,这种冒泡排序的使用范围很窄,从它的参数就可以看出,它只能排序整形的数组。


下面,我将带领大家用冒泡排序的方式来模拟实现一个针对所有数据的qsort函数

1.跟普通的冒泡排序结构一样,我们模拟的my_qsort拥有两个for循环,和一个count变量用于优化,不同的地方在于,参数里面多了size_t big(单个元素大小),和一个单独实现的比较函数。

此外为了不让my_qsort函数看起来没有那么臃肿,我还专门为交换写了一个函数(swap);


2.下面是compare函数的实现

返回前后两个元素的差值,来判断是否交换两个的位置。


3.交换函数swap的实现

此函数的原理就是讲单个元素分为x份,x由单个元素大小决定,打个比方,一个int的大小为四个字节,也就是四个char,那么当我们在进行交换的时候,每个元素都会被分为四个部分依次交换。


以下是总代码

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值