归并排序

分治思想的代表:子序列从长度 1 开始两两合并,合并时逐对比较头部、较小者先入辅助数组, 每轮子序列长度翻倍,直到整个数组有序。稳定排序,时间复杂度 O(n log n),需 O(n) 辅助空间。

归并排序
01 / 16 步
初始数组:5 2 8 1 9。二路归并:子序列从长度 1 开始两两合并,倍增到全数组有序。 比较 0 · 交换 0
伪代码

				
					
					1
					procedure mergeSort(a, n)
				
			
				
					
					2
					  size = 1
				
			
				
					
					3
					  while size < n do
				
			
				
					
					4
					    for left = 1 to n - size step 2 * size do
				
			
				
					
					5
					      mid = left + size - 1
				
			
				
					
					6
					      right = min(left + 2 * size - 1, n)
				
			
				
					
					7
					      merge(a, left, mid, right)
				
			
				
					
					8
					    end for
				
			
				
					
					9
					    size = 2 * size
				
			
				
					
					10
					  end while
				
			
				
					
					11
					end procedure
				
			
01 / 16
速度