c语言 字符串 正序再倒序_【数据结构】冒泡排序算法的实现(C语言)

aff40a713aeceb3ae6cfc2d6f2841ebd.png

排序之冒泡排序算法的实现

算法思路:

该算法依次比较两个相邻数据的大小,上面数值较大则交换两个数的位置,否则位置不变。过程中较大的数会"沉在底部”,较小的数依次像气泡一样上浮,故称该算法为“冒泡排序”

从第一对开始依次比较,顺序错误就进行交换,正确就不改变,执行完一趟后,底部将得到最大的数。接着重复上述操作(除了最后一个),直到得到正确的顺序。

过程示例:

c0888681f78480606b145d7a65effd0d.png
第一趟得到最大数8

b0579dad72b715521f097457a83ed06f.png
第二趟得到极大数7

761b1c4ef1cf5efd8772fe8e6202255a.png
第三趟得到极大值5

c205d1edaa40592137a7f1e7bc765bb8.png
接下来依次确定4,3,2,得到正确顺序

C语言实现:

#include

测试结果:

044c77b82638f2ad8d8826746391c636.png
程序测试结果

冒泡排序时间复杂度分析:

若数据初始状态为正序,则一趟扫描就可以得到结果。比较次数为n-1,赋值次数为0(交换次数为0)。

故冒泡排序最好情况下时间复杂度为O(n)

最坏情况下(逆序),要执行n-1趟,每一趟都要进行交换次数为n-i-10≤i≤n-1

此时,比较次数最大为 :

1+2+...+n-1=

=O(
)

赋值次数(元素移动次数)最大为:

3(1+2+...+n-1)=

=O(
)

(这种情况下,每比较一次,都要交换数据,赋值三次)

冒泡排序最坏情况下时间复杂度为O(

)

综上,冒泡排序总的平均时间复杂度为O(

)。

算法稳定性:

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。[1]

Bingo!

参考

  1. ^百度百科:冒泡算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值