python的排序算法
选择排序
选择排序,搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,也就是索引为零,算法就会交换着两个位置的项。然后,算法回到第二个位置并且重复这个过程。
def selectionSort(alist):
i = 0
while i < len(alist):
midIndex = i
j = i +1
# 搜索整个列表,找到最小项的索引
while j < len(alist):
if alist[midIndex] > alist[j]:
midIndex = j
j +=1
# 如果最小值不是第一项就交换位置
if alist[i] != alist[midIndex]:
alist[i],alist[midIndex] = alist[midIndex],alist[i]
i += 1
return alist
alist = [14,12,15,1,3,8,2,4,6]
print(selectionSort(alist))
控制台输出:
[1, 2, 3, 4, 6, 8, 12, 14, 15]
这里函数包含了嵌套循环,对于大小为 n 的列表,外围的循环 n-1 次。在第 1 次通过外围循环的时候,内层循环执行 n-1次。在第 2 次通过外围循环的时候,内层循环执行 n-2次。
冒泡排序
冒泡排序,从列表的开头处开始,比较一对数据项,直到移动到列表的末尾。每当成对的两项之间的位置不正确的时候,就交换他们的位置。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
def bubbleSort(alist):
n = len(alist)
while n > 1:
i = 1
while i < n:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i +=1
n -= 1
return alist
alist = [14,12,15,1,3,8,2,4,6]
print(bubbleSort(alist))
控制台输出:
[1, 2, 3, 4, 6, 8, 12, 14, 15]