排序之冒泡排序(Bubble Sort)

1. 基本思想

* 递归比较相邻的两个数,若前面的数比后面的数大,则进行交换。这样,最大的数就被交换到了最后。

* 重复执行上面的过程,直到没有需要交换(用一个flag记录)为止。

 

2. 简单实现

 

 

3. 冒泡排序算法改进

对于冒泡排序来说,元素的位置对性能影响很大。若值较大的数在数列的开头附件位置,这样的结点我们称之为兔子,因为这些结点不会对性能产生较大的影响,它们可以很快地被交换到最后。而对于值较小且位置靠近数列结尾,这样的结点我们称之为乌龟,因为这些结点被移动到开头的过程是非常缓慢的,因此,对性能有极大的影响。

有一些方法可以用来消除乌龟结点,以改进冒泡排序的性能。

 

方法一、Cocktail排序

Cocktail排序算法又叫双向冒泡排序,基本思想是不断递归操作子数列,将最大值交换到数列末尾后,再将最小值交换到数列开头,如此反复,直到不需要交换为止。

 

 

 

方法二、Comb排序

与Cocktail排序不同,Comb排序算法是从交换结点间隔角度来消除乌龟结点的。对于普通的冒泡排序来说,都是对相邻结点进行比较交换的。Comb排序则对一定间隔的数列结点进行比较交换。结点间隔一开始为数列的长度,每次执行后,则收缩结点间隔,直到结点间隔为1。收缩因子一般为1.247330950103979。

 

 

待续...

 

 

4. 应用场景

冒泡排序的效率相对于其他好的排序算法来说是比较差的。不过,在某些场景下,比如,带时间的日志记录整体上是按时间顺序排列的,只有很少一些日志记录在很小的范围内顺序是乱的,这种情况下,用冒泡排序会更好些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值