本文介绍的排序包括:冒泡,选择,快排,插入,希尔
一、 冒泡排序
冒泡排序:
冒泡排序是基于相邻位置的两两比较,交换位置这个想法来的,每轮有一个数确定最终位置
1.从第一个数开始,第一个数和第二个数比较,如果前一个数大于后一个数,交换两者的位置,否则,不动
2.比较第二个数和第三个数的大小,如果前一个数大于后一个数,交换两者的位置,否则,不动
3.比较第三个和第四个数的大小,如果前一个数大于后一个数,交换两者的位置,否则,不动
……
4.直到倒数的两个数比较和交换完成,至此,完成了第一轮的排序,把最大的数放在了最后一个位置,确定倒数第一个位置的数(下图是一轮的图例)
5.把第一位到倒数第二位的数进行以上步骤,确定倒数第二个位置的数
6.把第一位到倒数第三位的数进行以上步骤,确定倒数第三个位置的数
……
7.直到第一个位置的数确定,完成整个的冒泡排序
def bubble_sort(alist):
end = len(alist)-1
#执行完每轮循环都会少一个数,所以从后开始算
for i in range(end, 0, -1):
for j in range(i):
if alist[j] > alist[j+1]:
#相邻两个数的比较,把大的换到后面
alist[j], alist[j+1] = alist[j+1], alist[j]
else:
continue
return alist
if __name__ == '__main__':
alist = [54,26,93,17,77,31,44,55,20]
res = bubble_sort(alist)
print(res)
二、选择排序
选择排序:
它的原理很简单,遍历(这个实际上是有一个比较过程,遍历的第一个数作为最大的数,不断当前位置的数比较,如果当前的数更大,把它的值给最大的数)数列找到最大的数直接放在它的最终位置
下面用排列成从大到小的数列举例解释:
遍历所有的数,找到最大/小的数放在第一位/最后一位
遍历剩下的数,找到剩下的数里最大/小的数放在第二位/最后二位
……
重复以上步骤
直到最后一个数放在了它最终位置
动图是整个排序的图示过程:
白色表示未排序的数
淡黄色表示已排序好的数
蓝色表示当前遍历的位置
红色表示遍历过程中得到的最小的数
def select_sort(alist):
end =