小白学数据,只为记录学习进程,对每个问题有新的理解会及时更正。
一、归并排序
归并排序是一个先分再合的过程,先将序列通过二分法分成一个个子序列,后面再比较相邻的两个序列,把两个序列合并成一个有序序列,重复这个过程,直到合并完毕
def merge_sort(list):
n = len(list)
if n <= 1:return list
mid = n//2
left = merge_sort(list[:mid])
right = merge_sort(list[mid:])
left_point,right_point = 0,0
res = []
while left_point < len(left) and right_point < len(right):
if left[left_point] <= right[right_point]:
res.append(left[left_point])
left_point += 1
else:
res.append(right[right_point])
right_point += 1
res += left[left_point:]
res += right[right_point:]
return res
if __name__ == "__mian__":
list = [2,6,9,4,3,8,4,1,7]
a = merge_sort(list)
print(a)
时间复杂度: O(nlogn)
二、希尔排序
在插入排序的基础上,引进gap概念,通过构造子序列,来实现排序功能
list = [2,6,9,4,3,8,4,1,7]
n = len(list)
gap = n//2
while gap > 0:
for j in range(gap,n):
i = j
while i > 0:
if list[i] < list[i-gap]:
list[i],list[i-gap] = list[i-gap],list[i]
i -= gap
else:break
gap //= 2
print(list)
时间复杂度: O(n^(1.3—2))