名字来源:
大数(or小数)经由交换会慢慢浮到列表末尾,就像沸腾的泡泡一样,从锅底往上冒泡.
具体实现:
两两比较,每次比较完一趟后,趟数减少(因为第一个数or最后一个数确定了它的位置,排序过程它的位置都不会变化)
def bubble_sort_self(mylist):
length = len(mylist)
for i in range(length): # 比较的趟数
flag = True # 可能当前序列是有序的
for j in range(length - i - 1): # 每趟哪些元素和哪些元素进行比较
if mylist[j] < mylist[j + 1]: # 值小的数每次都往最后挤兑
mylist[j], mylist[j + 1] = mylist[j + 1], mylist[j]
flag = False # 一旦进入条件语句,那么当前是无序的
if flag: # 可能排到某个时候,就直接是有序的
break
return ''.join(mylist)
if __name__ == '__main__':
mystr = 'ABDKKDF'
mylist = list(mystr)
print('Before sorting:', mystr)
new_str = bubble_sort_self(mylist)
print('After sorting:', new_str)
分析:
比较的次数,只弄到length-i-1的原因: 以i为0为例子,你只要排到length-2即可,因为最终我们会比较
mylist[j]
(倒一)和mylist[j+1]
(倒二)的大小