选择排序
选择排序,搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,也就是索引为零,算法就会交换着两个位置的项。然后,算法回到第二个位置并且重复这个过程。
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]
插入排序
def insert_sort(alist):
'''插入排序'''
n = len(alist)
# 从右边的无序序列中取出多少个元素执行这样的过程
for j in range(1,n):
# i 代表的是内存循环起始值
i = j
# 执行从右边的无序序列中取出第一个元素,即第 i 位元素
# 然后将其插入到前面的有序列表中
while i > 0:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i -=1
else:
break
if __name__ == '__main__':
alist = [4,5,7,1,6,8,12,10]
print(alist)
insert_sort(alist)
print(alist)
[4, 5, 7, 1, 6, 8, 12, 10]
[1, 4, 5, 6, 7, 8, 10, 12]