前言

面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序。

一、基本原理

1.概念:



冒泡排序(Bubble Sort),是一种计算机领域的较简单的排序算法。



它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。



这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。



2.算法原理:



冒泡排序算法的运作如下:(从后往前)



>比较相邻的元素。 如果第一个比第二个大,就交换他们两个



>对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。



>针对所有的元素重复以上的步骤,除了最后一个。



>持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。



 

二、交换两个数

1.如果a = 10 , b = 20如何交换两个数呢?

2.实现两个数的交换原理其实很简单,设一个临时变量c就可以了:

>先把a的值传给c,此时c的值就是10了,a的值还是10

>然后把b的值传给a,此时a的值是20,b的值还是20

>最后把c的值传给b, 此时b的值是10

python中冒泡排序怎么编写 python中的冒泡排序_python中冒泡排序怎么编写

3.python里面交换两个数不用那么复杂,用这个方法就行了:

>a , b = b,  a

 

三、遍历比较相邻的数

1.比如一个队列是:[1, 3, 10, 9, 21, 35, 4, 6]

2.可以做一次遍历,比较相邻的数,前面的数比后面的数大就交换,这样第一次遍历可以把最大的数下沉到最后一个位置

3.为了便于理解,交换过的地方用红色框框圈出来了

python中冒泡排序怎么编写 python中的冒泡排序_数据结构与算法_02

 

四、循环下沉

1.上面的遍历比较只做了一次下沉,把最大的数下沉到最后一个位置了,那接下来就需要把第二大的数,下沉到倒数第二个位置,

依次循环,一直到最小的数在最上面。

2.这里s是先计算li队列的长度,然后把range函数反转了,变成:[7, 6, 5, 4, 3, 2, 1, 0]

python中冒泡排序怎么编写 python中的冒泡排序_python中冒泡排序怎么编写_03

 

五、sort()排序

1.讲真,python里面排序不用这么麻烦,一个函数搞定:sort()

python中冒泡排序怎么编写 python中的冒泡排序_面试_04

 

六、参考代码

# coding:utf-8
li = [1, 3, 10, 9, 21, 35, 4, 6]

s = range(len(li))[::-1]
print s

for i in s:
    for j in range(i):
        if li[j] > li[j + 1]:
            li[j], li[j + 1] = li[j + 1], li[j]

# 排序函数
# li.sort() 

print li