第二章作业
1,伪代码
function find(a, left, right, k):
if (left == right);
return a[left]
p = Partition(a, left, right)
leftLen = p - left + 1
if (k == leftLen)
return a[p];
else if k < leftLen:
return find(a, left, p-1, k)
else:
return find(a, p+1, right, k - leftLen);
2,在最好情况下,k直接等于 leftLen,时间复杂度为O(n);最坏情况下,每次选择的基准都使得左右两边的数组规模有很大差异,此时时间复杂度为O(n^2).
3,分治法通过不断划分数组,将问题拆解后,通过递归调用,分别求解再进行合并,从而降低时间复杂度。适用与归并和快速排序相关问题中,具有广泛的适用性。

浙公网安备 33010602011771号