我正在实现复杂的算法,其中一部分是对有序数字序列的数组进行排序。整个算法应该是 nlog(n)复杂度,所以这部分应该相同或更好,但我不知道如何做到这一点。
有一个例子。有一系列序列:
(0)
(0,1)
(0)
(0,5)
(2,4)
()
(0,5)
()
(2,4)
(1,3,4)
并且最终排序应该是:
()
()
(0)
(0)
(0,1)
(0,5)
(0,5)
(1,3,4)
(2,4)
(2,4)
有一些重要的注意事项:
你能告诉我如何排序它的最好方法吗?非常感谢
答案 0 :(得分:2)
你的问题似乎与radix sort
类似,在这种情况下,如果没有这样的项目,首先按最右边的项目排序(例如第100项),将其设置为min possible value - 1
(例如在案例中)我可以看到-1),然后用第二个最右边的项目对这个排序的序列进行排序,并继续这种方式。
此外,如果序列中的项目都在1..k之间(在这种情况下我可以看到介于1..9之间)使用counting sort
在O(n)中对它们进行排序,如果可以使用计数sort,排序时间为O(n),但排序时间为O(n log n)。
答案 1 :(得分:1)
如果使用quicksort,则排序算法将为O(n log n)。如何比较这两个项目与排序本身的复杂性无关,并且有其自身的复杂性(可能是O(m))。
答案 2 :(得分:0)
如果您可以将GPLv3代码集成到项目中,GNU Sort可能是一个很好的起点。至少,当我在你的样本输入上运行它时,我得到了你的样本输出,所以它不会立即出错。