python冒泡排序原理_python | 冒泡排序算法

前言 :最近在学习算法,以后坚持每天更新一种算法,持续一年!

冒泡排序算法

原理冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(来自:百度百科)

算法个人理解

根据原理的解释,我们可以知道对数组进行冒泡排序需要注意以下几个要点:确定排序顺序;冒泡排序算法需要确定一个顺序,例如从小到大或者从大到小排列

比较相邻两个数大小;按照顺序依次对比相邻两个数的大小,如果相邻两个数的大小与要进行的排序顺序相反则交换两个数的位置

迭代步骤2;假设我们要对数组进行从大到小,我们进行第一次步骤2能够使得最小值到达数组末尾,执行第二次步骤2能使得次小值到达数组倒数第二个位置,以此类推

算法实现

基于个人理解,用Python语言实现冒泡排序算法如下:

def bubble_sort(our_list):

for i in range(len(our_list)-1):

for j in range(len(our_list)-1):

if our_list[j] > our_list[j+1]:

our_list[j],our_list[j+1] = our_list[j+1],our_list[j]

return our_list

mylist = [10,9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,15,4,3,2,1,9,8,7,6,5,4,3,2,1]

print(bubble_sort(mylist))

输出结果为:

[0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 15]

算法优化

在看过大神的代码以后,我对模型的代码进行了以下两个优化:添加循环标记,当没有元素需要交换时,跳出循环。有一些数组本身就已经符合排序要求,对于这些数组就不需要进行排序了,直接跳出循环。

设置有序边界;每经过一次所有数据的比较,就增加了一个有序的数据,此时对于有序的数据就不需要再比较了。举个例子,数组[9,3,2,7]进行第一次冒泡排序,数组变成[3,2,7,9],此时9就是有序的数据了,没有必要对7和9进行比较。随着迭代次数的增加,需要排序的数据是越来越少的。

def bubble_sort_pro(our_list):

sortBorder = len(our_list)-1 #无序数组长度

for _ in range(len(our_list)-1):

flag = True #循环标记

for j in range(0,sortBorder):

if our_list[j] > our_list[j+1]:

our_list[j],our_list[j+1] = our_list[j+1],our_list[j]

flag = False # 有元素交换,所以不跳出循环

lastExchangeIndex = j

sortBorder = lastExchangeIndex

if flag:

break

return our_list

冒泡排序应该是最简单的算法了,经过优化以后,计算量降低了超过一半,所以不要小瞧小问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值