我做我温习功课准备考试。
想在什么条件下会插入排序的性能比泡更好的O排序给出相同的平均情况复杂度(N ^ 2)就知道了。
我也发现了一些相关的文章,但我无法理解他们。
有人会介意以简单的方式解释呢?
我做我温习功课准备考试。
想在什么条件下会插入排序的性能比泡更好的O排序给出相同的平均情况复杂度(N ^ 2)就知道了。
我也发现了一些相关的文章,但我无法理解他们。
有人会介意以简单的方式解释呢?
冒泡的优点是在检测出已排序列表中的速度:
冒泡最佳设想:O(N)
然而,即使在这种情况下,插入排序好转/相同的性能。
冒泡是,或多或少,只有理解和/或教学sortalgorithm的机制很好,但不会找到编程这几天正确使用,因为它的复杂性
O(N²)
意味着其效率上的比小数量的元件的多个列表显着降低。
下面的事情来到我的脑海:
冒泡排序总是需要一个更传过来阵列,以确定它是否排序。 在另一方面,插入排序不需要这一点 - 一旦最后一个元素插入,算法保证了数组进行排序。
冒泡排序确实n
每通比较。 插入排序不小于n
比较:一旦算法找到在何处插入停止进行比较,并采取下一个元件的电流元件的位置。
最后,引用维基百科的文章:
冒泡排序也与现代的CPU硬件很差交互。 它至少需要两倍多的写操作插入排序,两倍的高速缓存未命中,并且渐进多分支预测失误。 通过阿斯特拉汉在Java中排序字符串实验表明冒泡排序为大致5慢于插入排序慢40%,比选择排序时间和
你可以找到链接到原始的研究论文在那里。
我猜你正在寻找的答案在这里 :
冒泡排序,也可以有效地使用的是已经排序,除了极少数的元素列表上。 例如,如果只有一个元素是不按顺序,冒泡排序将只需要2n个时间。 如果两个元素才能都没有,冒泡排序将只需要最多3N时间...
和
插入排序是一个简单的排序算法是小型名单和主要排序名单相当有效,而且往往被用作更复杂的算法部分
你能否提供链接到相关的文章你不明白吗? 我不知道他们可能会解决什么问题。 除此之外,有可能是冒泡排序的理论差更适合于表示为阵列(绝对比表示为链表那些)的集合,而插入排序是适合于链表。
推理将是冒泡排序总是在一个时间,该时间在两个琐碎交换两个项,阵列和链表(在阵列上更有效的),而插入排序插入在给定列表的地方进行琐碎链表但涉及移动以阵列向右所有后续的元件。
话虽这么说,把它当作一粒盐。 首先,数组排序,在实践中,几乎总是比排序链表更快。 只是由于这样的事实,扫描列表,一旦有一个巨大的差异了。 除此之外,移动一个数组向右的n个元素,比执行n次(或甚至N / 2)互换快得多。 这就是为什么其他的答案正确要求插入排序是一般的出众,为什么我真的想知道您阅读文章,因为我不认为说这是在情况下,更好的一个简单的方法,那就是在情况较好B.
在最坏的情况下都倾向于在O操作执行(N ^ 2)
在最好的情况下,即,当该阵列被已经排序,冒泡排序可以在O(n)的执行。