第三章 分治算法习题 1、编写程序实现归并算法和快速排序算法 参见后附程序 2、用长为100、200、300、400、500、600、700、800、900、1000 的10 个数组的排列来统计这两种算法的时间复杂性
有些同学用的微秒us 用s 可能需要把上面的长度改为10000,……,100000,都可以 大部分的结果是快速排序算法要比归并算法快一些
3、讨论归并排序算法的空间复杂性
解析:归并排序由分解与合并两部分组成,如果用( )S n 表示归并排序所用的空间
则由 MergeSort(low, mid) //将第一子数组排序 )2/(nS MergeSort(mid+1, high) //将第二子数组排序 )2/(nS Merge(low, mid, high) //归并两个已经排序的子数组 nnO2)( 则 )}(),2/(max{)(nOnSnS )()2/()(nOnSnS 递归推导得 )()2()1()()2()2()2()1()()2()4()()2()(1nOnOSnOnOnOnOSnOnOnSnOnSnSkk 又由存储数组长度为n ,则有 )()(nOnS 因此,空间复杂度为)(nO
4、说明算法PartSelect 的时间复杂性为( )O n 证明: (1)当7r 时,假设数组A 中元素互不相同
由于每个具有7 个元素的数组的中间值 u是该数组中的第4 小元素,因此数组中至少有4 个元素不大于 u,/ 7n 个中间值中至少有/ 7 / 2n 个不大于这些中间值的中间值 v
因此,在数组A 中至少有 4/ 7 / 22/ 7nn 个元素不大于v
换句话说,A 中至多有 5122/ 72( / 7/ 7),(06)77nnnnene