1. 选择排序
从待排序的数据元素(列表)中选出最小(或最大)的一个元素,存放在序列的起始位置,然后算法回到下一个位置重复这个过程,直到全部待排序的数据元素排完。
def selectionSort(lyst):
i = 0
while i < len(lyst) - 1:
minIndex = i
j = i+1
# 循环完后,minIndex赋值为值最小的那个索引
while j < len(lyst):
if lyst[j] < lyst[minIndex]:
minIndex = j
j = j+1
if minIndex != i:
lyst[i],lyst[minIndex] = lyst[minIndex],lyst[i] #交换第一项和最小项
i = i+1
return lyst
list1 = [5,3,1,2,4]
print(selectionSort(list1))
Out:[1, 2, 3, 4, 5]
2. 冒泡排序
冒泡排序的策略是从列表的开头处开始,比较一对数据项,直到移动到列表的末尾。每当成对的两项之间的顺序不正确的时候,算法就交换其位置。这个过程的效果就是将列表中最大的项以冒泡的方式排到列表的末尾。然后,算法从列表开头到列表的倒数第2个项重复这一过程,依次类推,直到没有任何一对数字需要比较。
def bubbleSort(lyst):
n = len(lyst)
while n > 1:
i = 1
# 循环完后,最大的项已经冒泡到了列表的最后一项
while i < n:
if lyst[i] < lyst[i-1]:
lyst[i],lyst[i-1] = lyst[i-1],lyst[i] # 交换相邻的两项
i += 1
n -= 1
return lyst
list1 = [5,3,1,2,4]
print(bubbleSort(list1))
Out:[1, 2, 3, 4, 5]
如果列表本身是排好序的,冒泡排序不会执行任何的交换。可以对冒泡排序进行一个小的调整,将其在最好情况下的性能提高到线性阶。如果在通过第一轮主循环的时候,没有发生交换,那么,列表就是已经排序好的。
def bubbleSort(lyst):
n = len(lyst)
while n > 1:
swapped = False
i = 1
# 循环完后,最大的项已经冒泡到了列表的最后一项
while i < n:
if lyst[i] < lyst[i-1]:
lyst[i],lyst[i-1] = lyst[i-1],lyst[i] # 交换相邻的两项
i += 1
if not swapped:
return lyst
n -= 1
return lyst
3. 插入排序
- 在第 i i 轮通过列表的时候(其中 的范围从1到 n-1),第 i i