排序算法的稳定性
稳定性:稳定的排序算法会让原本相等键值的记录维持相对稳定。不稳定的排序算法可能会改变相等键值的相对次序,但是稳定的算法从来不会改变。
冒泡排序
如果是按照从小到大的顺序对其进行排序,那么每次都是两两排列,找到这组当中的最大值,并把最大值放到最后。
冒泡排序Python实现代码
def bublesort(alist):
n=len(alist)
for j in range(n-1):
for i in range(0,n-1-j):
if alist[i] > alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
#return alist
if __name__ =="__main__":
alist= [1, 2, 4, 8, 7, 9, 0]
print(alist)
bublesort(alist)
print(alist)
运行结果为:
[1, 2, 4, 8, 7, 9, 0]
[0, 1, 2, 4, 7, 8, 9]
自己打代码出现的问题
- if name == ‘main’ 就相当于是 Python 模拟的程序入口。其中注意main前面是两个下划线,后面也是两个下划线,如果写错的话,程序没有入口,导致没有输出结果。
- if alist[i] > alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
两个值的交换Python语言不需要加括号 - print( )输出时,需要加括号
- range(5)这个5表示的是运行的次数,其返回的是0-4,即运行了5次
- i,j的范围找不到,不知道从哪里开始,到底是运行几次
代码的核心部分分析
-
总共有n个数,需要排序n-1次,所以j的运行次数是n-1,一定注意range()括号里面的内容表示的是运行的次数。
在每次进行排序时,一开始比较n-1次,之后是n-2等,所以i的范围是n-1-j,一开始j的值其实是0. -
重点是range