Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort

Mergesort

merge sort里的基本思路就是递归的将要排序的数组划分成两个部分,然后将这两个子数组排序后在做归并,这样就得到一个排序后的数组。

一个简单的例子


Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort_第1张图片

mergesort uses at most NlogN compares and 6NlogN array accesses

分治算法


Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort_第2张图片

在对原始的mergesort改进上,提出了bottom-up mergesort 。就是前面的代码里,我们实现merge sort用的是top down的方式。也就是说我们首先递归的划分了各个段,再针对每个段来归并。实际上,我们也可以倒过来,从下到上,也就是一种bottom up的方式。

排序算法可以看成是一个决策树模型

Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort_第3张图片

排序的稳定性:在排序前后  具有相等值的项的先后顺序不会改变 就是稳定排序


2.Quicksort

排序流程


Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort_第4张图片

优点:节省space

缺点:重复值多时,效率不高且不稳定

快速选择(quick-select):就是从给定的一个集合S={a1,a2,...an}中选出第K个大小的数,或者给出其所在的下标之类的。

当碰到很多duplicate value 时,可以采用3-way-partitioning



Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort_第5张图片

排序算法小结


Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort_第6张图片

你可能感兴趣的:(Cousera 公开课Princeton Algorithms Part 1笔记:Mergesort)