最少写入排序链表python

时间:2015-05-30 14:59:13

标签: python sorting

我有一个链表:override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) let backgroundImage = UIImage(named: "theImage") let imageView = UIImageView() imageView.image = backgroundImage imageView.contentMode = UIViewContentMode.ScaleAspectFit self.tableView.backgroundView = imageView imageView.alpha = 0.0 UIView.animateWithDuration(3.0, animations: { () -> Void in imageView.alpha = 1.0 }) } 。我希望用最少的移动/写入来对其进行排序。

我只能使用1 3 7 4 5 0 2 6函数移动该列表的元素,该函数只需在insertBetween(element, after, before)element元素之间插入after

例如,第一次运行可能希望在0之后和之前2之前移动1: before

该列表现在为insertBetween(1, 0, 2)

现在它可能想要将7移到最后:3 7 4 5 0 1 2 6

该列表现在为insertBetween(7, 6, None)

现在它可能想要将0移到开头:3 4 5 0 1 2 6 7

该列表现在为insertBetween(0, None, 3)

此排序算法的唯一优先级是函数0 3 4 5 1 2 6 7的最少使用次数,因为使用它非常昂贵。我希望用Python实现它。

1 个答案:

答案 0 :(得分:1)

不要专注于你移动的元素。它们可以移动到任何地方而不是问题。相反,请关注移动的元素。那些需要已经排序。因此,如果您有N个元素和长度为L的最长排序子序列,您只需要N-L移动来移动不在该子序列中的N-L元素,并且您无法做得更好。查找排序最长的子序列是一个标准问题,但look here如果您不知道该怎么做。