冒泡排序及其改进算法

本文介绍了冒泡排序的基本思想,分析了其时间复杂度,并提出了改进方法,包括设置交换标志位、保存交换位置和双向扫描。同时,提供了C语言实现冒泡排序的代码示例。
摘要由CSDN通过智能技术生成
1. 冒泡排序的思想
冒泡排序是一种交换排序算法,他的思想原理是自下向上进行扫描,扫描过程中相邻关键词两两对比,若为逆序则进行记录交换,一次扫描结束后可以确定一个元素的位置。重复扫描直至没有记录需要交换为止。
2. 复杂度分析
最好的情况:正序,此时需要进行1次扫描,其中n-1次比较,0次交换,所以时间复杂度为O(n),空间复杂度为O(1);
最坏的情况:逆序,此时需要进行(n-1)次扫描,其中(n-1)+(n-2)+…+1=n(n-1)/2次扫描,其中n(n-1)/2次比较,3n(n-1)/2次交换,所以时间复杂度为O(n^2),空间复杂度为O(1);
平均情况:时间复杂度为O(n^2),空间复杂度为O(1)。
3. 改进方法
(1) 设置交换标志位swap。若一次扫描中没有记录发生交换,说明有序,无需下次扫描(上述算法中已使用)。
(2) 保存最后一次记录交换的位置,下次扫描进行到此位置开始即可。因为没有记录交换的部分已经有序。
算法实现如下:
(3) 双向扫描。对于两头大中间有序的序列,双向扫描可以降低扫描次数,提高效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值