《算法图解》第四章笔记与课后练习_快速排序算法
软件环境:Python 3.7.0b4
一、分而治之
工作原理:
- 找出简单的基线条件;
- 确定如何缩小问题的规模,使其符合基线条件。
# 4.2 def count(list): if list == []: return 0 return 1 + count(list[1:]) # 4.3 def max(list): if len(list) == 2: return list[0] if list[0] > list[1] else list[1] sub_max = max(list[1:]) return list[0] if list[0] > sub_max else sub_max
4.4:二分查找的基线条件是数组只包含一个元素。如果要查找的值与这个元素相同,就找到了!否则说明它不在数组中。递归条件为 把数组分成两半,将其中一半丢弃,并对另一半执行二分查找。
二、快速排序
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(nlog n)。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子里和园子外的大大们指正错误,共同进步。或者直接私信我 (^∀^)
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
本博客的所有打赏均将用于博主女朋友的化妆品购买以及养肥计划O(∩_∩)O。我是【~不会飞的章鱼~】!