3.插入排序:
每次考虑一个元素,左边都是排好序的,一个一个往前比,插入到一个位置,前面的元素都比他小
后面的元素都比他大,插入完成,后面元素全部右移一个位置
def insertionsort(s):
for index in range(1,len(s)):
while 0<index and s[index]<s[index-1]:
s[index],s[index-1] = s[index-1],s[index]
index -= 1
return s
4.归并排序
归并排序的实现分为递归实现与非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整个数组。
def mergeSort(s):
#递归分割
if len(s)==1:
return s
while len(s)>1:
mid = len(s)//2
left_half = s[:mid]
right_half = s[mid:]
mergeSort(left_half))
mergeSort(right_half)
#归并
i, j, k =0, 0, 0
while i<len(left_half) and j<len(right_half):
if left_half[i]>right_half[j]:
s[k] = right_half[j]
j += 1
else:
s[k] = left_half[i]
i += 1
k += 1
while i<len(left_half):
s[k] = left_half[i]
i += 1
k += 1
while j<len(right_half):
s[k] = right_half[j]
j += 1
k += 1
return s
加强版:
def mergesort(s):
start = []
end = []
while len(s)>1:
a = min(s)
b = max(s)
start.append(a)
end.append(b)
s.remove(a)
s.remove(b)
if s:
start.append(s[0])
end.reverse()
return (start+end)
参考链接https://github.com/ChinaRush/Python-1