还没写完……………………
插入排序
对于少量元素的排序,这是一个有效的算法
# 插入排序
def insert_sort(list):
# 从第二个元素开始,依次加入有序队列中
for i in range(1,len(list)):
# 将list[i]插入已经排序好的队列list[0,...,i-1]中
if list[i] < list[i-1]:
key = list[i]
index = i
# 从后往前依次比较每个元素
for j in range(i-1,-1,-1):
if list[j] > key:
list[j+1] = list[j]
index = j
else:
break
list[index] = key
return list
# 底下这个感觉更好理解一些
def insert_sort(list):
# 从第二个元素开始,依次加入有序队列中
for j in range(1,len(list)):
key = list[j]
i = j - 1
while i>0 and list[i] > key:
list[i+1] = list[i]
i = i - 1
list[i+1] = key
return list
shell排序
shell排序也是一种插入排序,是简单插入排序经过改进之后的一个更高效的版本,也成为缩小增量排序
将较大的数据集分割成若干个小组,然后对每个小组分别进行插入排序。
每一个gap过程中,每个小组内部是有序的
def shell_sort(list):
gap = len(list)//2
while gap>0:
for i in range(gap,len(list)):
for j in range(i,gap-1,-gap):
if list[j]<list[j-gap]:
list[j],list[j-gap] = list[j-gap],list[j]
else:
break
gap = gap // 2
return list
选择排序
- 首先在所有数组元素中找到最小值元素,放在list[0]中;
- 接着在不包含list[0]的余下数组元素中再找出最小值的元素,放置在list[1]中;
- 如此下去,一直到最后一个元素。
def select_sort(list):
for i in range(len(list)):
min = i
for j in range(i+1,len(list)):
if list[j] < list[min]:
min = j
tmp = list[i]
list[i] = list[min]
list[min] = tmp
return list
堆排序
冒泡排序
一个轮次一个轮次的处理
在每一轮次中依次对待排序数组元素中相邻的两个元素进行比较,将大的放前,小的放后–降序(或是将小的放前,大的放后,升序)
当没有交换时,则数据已被排好序
# 升序排序
# 每一轮次把当前最大的冒到最后
def bubble_sort(list):
for i in range(len(list)):
for j in range(1,len(list)-i):
if list[j] < list[j-1]:
tmp = list[j-1]
list[j-1] = list[j]
list[j] = tmp
return list
快速排序
归并排序