算法之------冒泡算法及冒泡算法改进点
1.冒泡算法的原理(搬运百度百科)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡代码
def bubbling_sort(array):
for i in range(len(array)-1):
for j in range(len(array) - i-1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
return array
if __name__ == '__main__':
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(array)
bubbling_sort(array)
print(array)
排序的过程如下:第一行是原始数据,方便查看
以第一次排序顺序举例:
10比17小,10位置不变-----》17比50 小,17位置不变----》 50 比7大,7与50交换位置----》 50比30大,30与50交换位置-----》 50比24大,50与24交换位置 ---》50比27大,50与27交换位置----》50比45大,50与45交换位置----》50比15大,50与15交换位置---》50比5大,50与5交换位置----》50比36大,50与36交换位置----》50比21大,50与21交换位置, 第一次排序把最大的数给找出来了
其他逻辑也是如此
2.冒泡优化点
可能也有一些列表是有序的,那其实就没有必要做一些排序。
如这样的列表,array=[9, 8, 7, 1, 2, 3, 4, 5],见下图排序列表顺序
按照以前代码那么排序是要经历8次排序,也就是列表的长度次数,那这里其实可以对冒泡建立一个标志位,如果发现是一个有序的,就不用进行排序,如下代码
def bubbling_sort_excange(array):
for i in range(1, len(array)):
exchange=False
for j in range(0, len(array) - i):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
exchange=True
print(array)
if not exchange:
return
return array
if __name__ == '__main__':
array=[9, 8, 7, 1, 2, 3, 4, 5]
bubbling_sort_excange(array)
print(array
在来看看它的执行次数,只做了5次的排序
作者:做梦的人(小姐姐) 出处:https://www.cnblogs.com/chongyou/ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 微信号:18582559217 |