图解算法 第四章 快速排序

本章内容

分而治之:通用问题的解决方法 devide  and conquer D&C,经典的递归式解决问题的方法

快速排序:使用分而治之的快速排序策略

分而治之

一:1680*640的小土地,能分出多少个最大的正方形(求最大公倍数)

  •  找出基线条件
  • 不断将问题缩小

快速排序

基线条件:设计数组递归函数,基线条件通常是数组为空或者包含一个元素。

Haskell编程:没有while循环,只有递归。

基准值(pivot):从数组中选择一个元素,作为基准值。这里将第一个元素作为基准值

三个元素的快排:

  • 选择基准值
  • 将数组分为:小于基准值&大于基准值
  • 对两个子数进行快速排序

归纳证明:基线条件&归纳条件 和递归是一样的

def quicksort(array):
	if len(array)<2:
		return array
	else:
		pivot = array[0]
		less = [i for i in array[1:] if i<=pivot]
		greater = [i for i in array[1:] if i>pivot]
		return quicksort(less)+[pivot]+quicksort(greater)
print(quicksort[10,5,2,3])

大O表示法

快排的平均时间O(nlogn),真正的时间是C*N,C为每次执行的固定时间。

快排的最糟糕情况O(N*N),和简单查找一样。

 

你可能感兴趣的:(图解算法)