冒泡排序法的原理是,重复的走访元素,比较两个相邻元素,将值大的元素放在之前或者之后,有多少个元素就比较多少轮,已经冒泡过的元素不再比较。
def bubble_sort(data):
length = len(data)
for i in range(length):
print("第{0}轮,排序前:{1}".format(i+1, data))
print("####")
for j in range(length - i -1):
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
print("第{0}次排序,排序后:{1}".format(j+1, data))
print("======")
如,
if __name__ == '__main__':
data = [1, 4, 3, 20, 7, 6, 1,0,17,12]
bubble_sort(data)
查看每轮比较后的结果。
第1轮,排序前:[1, 4, 3, 20, 7, 6, 1, 0, 17, 12]
第1次排序,排序后:[1, 4, 3, 20, 7, 6, 1, 0, 17, 12]
第2次排序,排序后:[1, 3, 4, 20, 7, 6, 1, 0, 17, 12]
第3次排序,排序后:[1, 3, 4, 20, 7, 6, 1, 0, 17, 12]
第4次排序,排序后:[1, 3, 4, 7, 20, 6, 1, 0, 17, 12]
第5次排序,排序后:[1, 3, 4, 7, 6, 20, 1, 0, 17, 12]
第6次排序,排序后:[1, 3, 4, 7, 6, 1, 20, 0, 17, 12]
第7次排序,排序后:[1, 3, 4, 7, 6, 1, 0, 20, 17, 12]
第8次排序,排序后:[1, 3, 4, 7, 6, 1, 0, 17, 20, 12]
第9次排序,排序后:[1, 3, 4, 7, 6, 1, 0, 17, 12, 20]
第2轮,排序前:[1, 3, 4, 7, 6, 1, 0, 17, 12, 20]
第1次排序,排序后:[1, 3, 4, 7, 6, 1, 0, 17, 12, 20]
第2次排序,排序后:[1, 3, 4, 7, 6, 1, 0, 17, 12, 20]
第3次排序,排序后:[1, 3, 4, 7, 6, 1, 0, 17, 12, 20]
第4次排序,排序后:[1, 3, 4, 6, 7, 1, 0, 17, 12, 20]
第5次排序,排序后:[1, 3, 4, 6, 1, 7, 0, 17, 12, 20]
第6次排序,排序后:[1, 3, 4, 6, 1, 0, 7, 17, 12, 20]
第7次排序,排序后:[1, 3, 4, 6, 1, 0, 7, 17, 12, 20]
第8次排序,排序后:[1, 3, 4, 6, 1, 0, 7, 12, 17, 20]
第3轮,排序前:[1, 3, 4, 6, 1, 0, 7, 12, 17, 20]
第1次排序,排序后:[1, 3, 4, 6, 1, 0, 7, 12, 17, 20]
第2次排序,排序后:[1, 3, 4, 6, 1, 0, 7, 12, 17, 20]
第3次排序,排序后:[1, 3, 4, 6, 1, 0, 7, 12, 17, 20]
第4次排序,排序后:[1, 3, 4, 1, 6, 0, 7, 12, 17, 20]
第5次排序,排序后:[1, 3, 4, 1, 0, 6, 7, 12, 17, 20]
第6次排序,排序后:[1, 3, 4, 1, 0, 6, 7, 12, 17, 20]
第7次排序,排序后:[1, 3, 4, 1, 0, 6, 7, 12, 17, 20]
第4轮,排序前:[1, 3, 4, 1, 0, 6, 7, 12, 17, 20]
第1次排序,排序后:[1, 3, 4, 1, 0, 6, 7, 12, 17, 20]
第2次排序,排序后:[1, 3, 4, 1, 0, 6, 7, 12, 17, 20]
第3次排序,排序后:[1, 3, 1, 4, 0, 6, 7, 12, 17, 20]
第4次排序,排序后:[1, 3, 1, 0, 4, 6, 7, 12, 17, 20]
第5次排序,排序后:[1, 3, 1, 0, 4, 6, 7, 12, 17, 20]
第6次排序,排序后:[1, 3, 1, 0, 4, 6, 7, 12, 17, 20]
第5轮,排序前:[1, 3, 1, 0, 4, 6, 7, 12, 17, 20]
第1次排序,排序后:[1, 3, 1, 0, 4, 6, 7, 12, 17, 20]
第2次排序,排序后:[1, 1, 3, 0, 4, 6, 7, 12, 17, 20]
第3次排序,排序后:[1, 1, 0, 3, 4, 6, 7, 12, 17, 20]
第4次排序,排序后:[1, 1, 0, 3, 4, 6, 7, 12, 17, 20]
第5次排序,排序后:[1, 1, 0, 3, 4, 6, 7, 12, 17, 20]
第6轮,排序前:[1, 1, 0, 3, 4, 6, 7, 12, 17, 20]
第1次排序,排序后:[1, 1, 0, 3, 4, 6, 7, 12, 17, 20]
第2次排序,排序后:[1, 0, 1, 3, 4, 6, 7, 12, 17, 20]
第3次排序,排序后:[1, 0, 1, 3, 4, 6, 7, 12, 17, 20]
第4次排序,排序后:[1, 0, 1, 3, 4, 6, 7, 12, 17, 20]
第7轮,排序前:[1, 0, 1, 3, 4, 6, 7, 12, 17, 20]
第1次排序,排序后:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第2次排序,排序后:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第3次排序,排序后:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第8轮,排序前:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第1次排序,排序后:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第2次排序,排序后:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第9轮,排序前:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第1次排序,排序后:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]
第10轮,排序前:[0, 1, 1, 3, 4, 6, 7, 12, 17, 20]