假设待排序序列为:5 4 3 2 1。
一、原理
每一轮将一个最大的数沉底。
第一轮(两两比较4次(5-i=4),i代表第几轮):
4 5 3 2 1
4 3 5 2 1
4 3 2 5 1
4 3 2 1 5
第二轮(两两比较3次(5-i=3)):
3 4 2 1 5
3 2 4 1 5
3 2 1 4 5
第三轮(两两比较2次(5-i=2)):
2 3 1 4 5
2 1 3 4 5
第四轮(两两比较1次(5-i=1)):
1 2 3 4 5
总结规律:
- 一共有5个数。
- 一共进行(5-1)轮。
- 每轮进行(5 - 第几轮)次两两比较。
二、编程实现
以下是Python实现代码:
# -*- coding:utf-8 -*-
def swap(list, i, j):
tmp = list[i]
list[i] = list[j]
list[j] = tmp
def bubble(list):
for i in range(len(list) - 1):
for j in range(len(list) - i - 1):
if list[j] > list[j+1]:
swap(list, j, j + 1)
l = [5, 4, 3, 2, 1]
print "Before sorting:", l
bubble(l)
print "After sorting:", l
运行结果:
Before sorting: [5, 4, 3, 2, 1]
After sorting: [1, 2, 3, 4, 5]
DNFM0002(10)