参考网址
了解前置知识
https://www.cnblogs.com/king-ding/p/bubblesort.html
优化一:_opsort()
某轮冒泡过程中没有发生元素交换,则说明整个序列已经排好序,此时不需要再进行后续的冒泡操作,可以直接结束程序。
for i in range(self.len_datas-1):
flag = True
for j in range(self.len_datas-1-i):
if(self.datas[j]>self.datas[j+1]):
self.datas[j], self.datas[j+1] = self.datas[j+1], self.datas[j]
flag = False
if flag:
break
优化二:_opersort()
假设有100个元素的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个元素,那么在第一轮冒泡过程后,最后发生交换的位置必定小于10,且该位置之后的元素必定已经有序。只需记录该位置,第二次从数组头部遍历到这个位置即可
#记录位置tag
for j in range(self.len_datas-1):
if(self.datas[j]>self.datas[j+1]):
self.datas[j], self.datas[j+1] = self.datas[j+1], self.datas[j]
tag = j+1
#print(tag)
规范代码
class BubbleSort(object):
'''
self.datas:数据列表
self.len_datas:数据长度
_sort():排序函数
_opsort():优化后的排序函数
_opersort():再优化后的排序函数
show():输出序列
用法:
BubbleSort(datas):实例化对象
BubbleSort(datas)._sort():排序
BubbleSort(datas).show():输出结果
'''
def __init__(self,datas):
self.datas = datas
self.len_datas = len(datas)
def _sort(self):
for i in range(self.len_datas-1):
for j in range(self.len_datas-1-i):
if(self.datas[j]>self.datas[j+1]):
self.datas[j], self.datas[j+1] = self.datas[j+1], self.datas[j]
def _opsort(self):
for i in range(self.len_datas-1):
flag = True
for j in range(self.len_datas-1-i):
if(self.datas[j]>self.datas[j+1]):
self.datas[j], self.datas[j+1] = self.datas[j+1], self.datas[j]
flag = False
if flag:
break
def _opersort(self):
for j in range(self.len_datas-1):
if(self.datas[j]>self.datas[j+1]):
self.datas[j], self.datas[j+1] = self.datas[j+1], self.datas[j]
tag = j+1
#print(tag)
for i in range(tag):
flag = True
for j in range(tag-1-i):
if(self.datas[j]>self.datas[j+1]):
self.datas[j], self.datas[j+1] = self.datas[j+1], self.datas[j]
flag = False
if flag:
break
def show(self):
print("Result:")
for i in self.datas:
print(i,end=',')
if __name__ == '__main__':
try:
#输入整数列表(英文','):1,5,6,9,8
datas = input("input some integers;split with ','")
datas = datas.split(',')
datas = [int(datas[i]) for i in range(len(datas))]
except Exception:
pass
bls = BubbleSort(datas)
#bls._opsort()
#bls._sort()
bls._opersort()
bls.show()
#参考网址:https://www.cnblogs.com/king-ding/p/bubblesort.html