【发布时间】:2017-05-11 07:07:03
【问题描述】:
问题- 给定一个排序的双向链表和两个数字 C 和 K。您需要将包含数据
K的节点的信息减少C并在其正确位置插入形成的新节点,以使列表保持不变排序。
对于这样的问题,我会考虑 插入排序,因为,任何实例的插入排序看起来都像,显示一堆卡片,
部分排序的。对于插入排序,交换次数等于反转次数。比较次数等于交换次数 + (N-1)。
因此,在给定的问题(上图)中,如果数据为 K 的节点减少了 C,则已排序的链表变为部分排序的。 插入排序是最合适的。
另外一点是,在排序算法的选择中,如果应用于数据的数组表示的排序逻辑最适合,那么相同的排序逻辑应该最适合相同数据的链表表示。
对于这个问题,我的思路在选择插入排序时是否正确?
【问题讨论】:
-
也许this 回答会有所帮助?
-
decrease(int nodeWithK, int decreaseByC)操作是一次性操作吗? -
@Richard 你是说,如果问题中给出的数据是数组表示,那么 插入排序 是最好的。如果此数据在链表中,那么 合并排序 最适合部分排序的数据?
-
@CahitGungor 是
decrease(int nodeWithK, int decreaseByC)是 O(1) 操作 -
如果这是一副纸牌(52 个物品或 54 个百搭牌)或双层(104-108),哪种算法最快是没有实际意义的。数据集大小 N 是固定的,而且相当小。
标签: algorithm sorting insertion-sort