<!doctype html>
Merge Sort:一.Motivation and Examplewhy study merge sort?The Sorting ProblemExample:二.Pseudocode:Pseudocode for Merge:Merge Sort Running Time:Running Time of Merge:Running Time of Merge SortRecall:三.AnalysisClaim:Question1:Question2Proof of claimhtml
Input: array of n numbers, unsorted. (5 4 1 8 7 2 6 3)web
Output: same numbers, sorted in increasing order (1 … 8)app
Key Question: running time of MergeSort on array of n numbers?ide
[Running time ~ #of mines of code executed ]ui
running time of merge on array of m numbers is <= 4m + 2 <= 6m(since m >= 1)this
Claim: MergeSort requires <= spa
operations for sort n numberscode
of times you divide by 2 until you get a number that drops below oneorm
So if you plug in 32 you got to divide five time by two get down to one.
For every Input array of n numbers, Merge Sort produces a sorted output array and uses at most 6nlog_2n + 6n operations.
Proof of calim (assuming n = power of 2):
how many levels does this recursion tree have.===>
beacause: {level0, level1……. level(log2n)} === > (log_2n - 0) + 1 ===>
at each level j = 0,1 ,2 , log_2n, there are 2^j subproblems, each of size n / 2^j.
第二個的緣由很簡單, 這顆遞歸樹的第j層的子問題有 2^j 個, 例如第0層是1個, 第1層是兩個, 由此類推, 因此每一個的大小都是n / 2^j.
第j層總的合併程序中所含有的指令次數是 <= 2 ^j * 6(n / 2^j) = 6n.也就是所每一層的合併程序內部所作的指令次數都是固定的, 爲6n次, 因此對於這課共有log2n + 1個層的數, 總的操做次數爲6n( log2n + 1) = 6nlog_2n + 6n.