2.排序

归并排序:

先递归 再分数组排序
''' 将 alist 拆分为 leftalist 和 rightalist 两个数组递归 ''' def merge_sort(alist): if (len(alist) <= 1): return alist mid = len(alist)//2 leftalist = merge_sort(alist[:mid]) rightalist = merge_sort(alist[mid:]) return merge(leftalist,rightalist)
''' 将拆分后的两个子列表进行排序合并 ''' def merge(lalist,ralist): lalist_point,ralist_point = 0 , 0 result = []
''' 排序 ''' while lalist_point < len(lalist) and ralist_point < len(ralist): if lalist[lalist_point] <= ralist[ralist_point]: result.append(lalist[lalist_point]) lalist_point += 1 else: result.append(ralist[ralist_point]) ralist_point += 1
''' 合并 ''' if lalist_point == len(lalist): result += ralist[ralist_point:] else: result += lalist[lalist_point:] return result

快速排序:

先分数组 再递归
''' 分治法'''
def quicksort(listone): if len(listone) < 1: return listone else: num = listone[0] less = [i for i in listone[1:] if i < num] rest = [i for i in listone[1:] if i > num] return quicksort(less)+[num]+quicksort(rest)
listone = [3,4,6,1,2,5] print(quicksort(listone))
def QuickSort(nums,left,right): if left>=right: return nums baseNumber=nums[left] i=left j=right while i!=j: while j>i and nums[j]>=baseNumber: //j哨兵 从右往左 找到一个比 baseNumber 小的数 j-=1 while i[InvalidCharacterError: "nums[i]<" did not match the Name production]
return nums