- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须开发一种能够对 n 元素列表进行排序的算法,其中第一个 (n- root(n)) 个元素已排序。是的,这是一道作业题。
经过一些research在互联网上和stack-overflow ,我相信插入排序和冒泡排序最适合部分排序的数组。这link清楚地表明插入排序优于归并排序。我把插入排序作为我作业的答案。
但是,当我开始进行渐近复杂度分析时,我会感到困惑。
对于插入排序,我们至少要看一下每个元素。如果元素未排序,我们将不得不进行移位/反转。因此,插入排序的复杂度为 O(n + m),其中 m 是总反转次数。或者,我们也可以说它具有线性复杂度 O(n)。
对于归并排序,我们需要对未排序的root(n)个元素进行归并排序,这会带来root(n)log(root(n))的复杂度。此外,我们需要与排序列表进行合并(这将花费 O(n))。因此,复杂度将为 O(root(n) log (root (n)) + n) 或 O(n),因为 n 支配 root(n) log (root(n))。
为什么两者具有相同的渐近复杂度?这只是我的好奇心。我可能在复杂性计算过程中的某个地方犯了错误。
我是一名学生,还在学习中。我感谢任何帮助。谢谢。
最佳答案
此列表中的总反转计数可能高达 (n - Sqrt(n)) * Sqrt(n) = O(n3/2)。
示例:100 个元素的列表 (10 11 12..99 100 1 2 3 4 5 6 7 8 9 10) 的倒置计数为 900,因此插入排序将执行大约 900 次操作(每个尾部元素移动 90 次)
关于algorithm - 在部分排序的数组中,插入比归并排序有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12684756/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!