【发布时间】:2020-06-04 03:53:37
【问题描述】:
正如问题所说,我需要用 C 或 Python 编写一个算法,该算法使用分而治之来检查数组是否已排序。我有一个基本的想法,但我似乎无法得出一个明确的答案。 这是我到目前为止得到的,使用伪代码:
isSorted(array, start, end):
if (len(array)) <= 1: return true
if (end - start) == 1: return array[end] > array[start]
middle = (end + start) // 2
return isSorted(array, start, middle) && isSorted(array, middle, end)
这样可以解决问题吗?还是我错过了一些该算法不起作用的边界情况?
【问题讨论】:
-
这会导致堆栈溢出异常。您不处理 start == end 的情况。您可能认为您使用的是 len(array),但这是完整的数组,而不是传递到当前范围的部分数组。
-
所以如果 start == end 返回 true,则可以通过添加另一个条件来纠正第一个错误。我的第二个错误,我可以使用 end - start 而不是使用 len。
标签: arrays sorting pseudocode divide-and-conquer