arrays - 检查数组是否使用分治法排序
问题描述
正如问题所说,我需要用 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)
这能行吗?还是我错过了一些该算法不起作用的边界情况?
解决方案
找到了我自己的问题的答案,我在那里,但在评论中标记了一些问题。其中之一是当数组中有重复项时我没有处理,并且 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 编写的,非常接近上面的伪代码,它适用于我制作的案例。
推荐阅读
- antd - 如何使用侧边栏从可折叠状态的菜单项中删除默认工具提示?
- node.js - 什么算作 Firestore 中的读取操作?
- llvm - 如何获取 lli 执行跟踪
- debugging - 如何在方案中为 gimp 调试 script-fu 脚本?
- wpf - 如何从 WPF Prism 中的另一个视图单击按钮时更新视图中的文本?
- python - 如何更改数组的维度
- c# - WMI ConnectServer 到 ROOT\CIMV2 为 C++ 应用程序返回“拒绝访问”,但对 C# 应用程序工作正常
- spring - HttpStatus.CREATED 和 URI LOCATION 的区别
- python - 使用稀疏索引和值更新 numpy 数组
- android - Android Webrtc 从来自其他对等方的流中录制视频