sorting - 对部分排序的数组进行排序
问题描述
假设给定一个 n 个元素的排序列表,后跟 f(n) 个随机排序的元素。如果 (i) f(n) = O(logn),你将如何对列表进行排序。我觉得最好的算法是合并排序,但我不确定由此产生的时间复杂度。
解决方案
您应该首先使用任何排序方法对 f(n) 元素进行排序,然后在最后阶段使用归并排序。时间复杂度将是O(n),因为与排序部分的线性扫描相比,O(log(n) 2 )可以忽略不计。
如果通过列表表示数组,则可以通过使用二进制搜索查找左侧部分的插入点来减少与O(log(n) 2 )的比较次数。它仍然需要O(n)复制操作,因此根据复制与比较的相对成本,即使对于中等大的n值,时间也可能保持亚线性。
推荐阅读
- javascript - (节点:23) UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
- python - 如何在html和python中将文本向下追加
- audio - 如何在 Gstreamer 中动态交换左/右音频输出
- python - 如何根据类型分隔列表值 - Python
- css - 如何在所有浏览器中使 figcaptions 遵循图像的(未知)宽度
- google-cloud-platform - 如何从 Google Cloud Firestore 下载大量文档?
- regex - 正则表达式解析字符串中的国家/地区
- javascript - 我们可以让变量在 Javascript 中作为 getter 工作吗?
- html - 将鼠标悬停在类的 [li] 元素上
- angularjs - 关闭模态对话框时刷新父组件列表