afanty分析:
对于N个数的递进冒泡排序
1、趟数是 N-1 趟
2、第 i 趟的比较次数是 N-i 次
3、两两比较前者大于(注意不是大于等于,冒泡是稳定的)后者则交换。
改进的话就是增加一个交换记录器(数),每趟检查下记录器,如果没发现交换则表示已经有序。
我上面的表述是为了方便写代码,详细的冒泡介绍可以百度下,下面是实现的代码:
(注意的一个问题是,对象的引用问题,代码中对参数进行深度拷贝防止修改原来的列表)
#coding=utf-8
'''
Author: afanty
Date: 2015/5/16
'''
from copy import deepcopy
def bubbleSort(a=[]):
'''
:param a: 列表,默认为空列表
:return: 参数为非列表类型返回False,否则放回递增排序列表
'''
if isinstance(a,list):
i = 1
a = deepcopy(a)
while i <= len(a): # 趟数
j,flag = 1,0 # flag为交易记录数,当某趟没有发生交换即表示列表已经有序
while j <= (len(a)-1): # 每趟比较次数
if a[j-1] > a[j]:
flag += 1
a[j-1],a[j] = a[j],a[j-1]
j += 1
# while
if flag == 0:
return a
i += 1
# while
return a
else:
return False
# end