基本思想
从数组第一位开始,顺序地将相邻的两个数进行比较,小在前大在后,一趟比较下来,最大的就沉到最后去了;第二趟就从第一个到倒数第二个,以此类推,直到剩下第一个和第二个相比较。
Python实现
def heapSort(a):
# 冒泡排序: 小->大
n = len(a)
for i in xrange(n):
for j in xrange(n - i - 1):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
return a
print heapSort([11, 1, 6, 9, 8, 5])
Python实现---加入判断标志
def heapSort(a):
# 冒泡排序: 小->大
# 加入了标志判断是否已全部排好序
n = len(a)
change = True
while change:
for i in xrange(n):
change = False
for j in xrange(n - i - 1):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
change = True
return a
print heapSort([11, 1, 6, 9, 8, 5])
Python实现---两端同时进行
def heapSort(a):
# 冒泡排序: 小->大
# 对冒泡排序的改进,同时选出最大和最小,外层循环为 n / 2
low = 0
hight = len(a) - 1
while low < hight:
for i in xrange(low, hight):
if a[i] > a[i + 1]:
a[i], a[i + 1] = a[i + 1], a[i]
for i in xrange(hight - 1, low, -1):
if a[i - 1] > a[i]:
a[i - 1], a[i] = a[i], a[i - 1]
low += 1
hight -= 1
return a
print heapSort([11, 1, 6, 9, 8, 5])
print heapSort([11, 10, 9, 8, 5])
效率
O(n^2)