【问题标题】:Check if an array is sorted using Divide and Conquer使用分治法检查数组是否已排序
【发布时间】: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


【解决方案1】:

找到了我自己的问题的答案,我很满意,但是在 cmets 中我标记了一些问题。其中之一是当数组中有重复项时我没有处理,并且 len(array) 无法正常工作,因为我从未更改过数组。

def isSorted(array, start, end):
    if start == end: return True
    if (end - start) == 1: return array[end] >= array[start]
    middle = (end + start) // 2
    return isSorted(array, start, middle) and isSorted(array, middle, end)

这是用 Python 编写的,非常接近上面的伪代码,它适用于我制作的案例。

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 2012-04-08
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2022-06-10
    • 2019-03-11
    相关资源
    最近更新 更多