我有log(n)成对排序的子序列(其长度可以不同),我需要将其排序为O(n log log n), 但我不知道如何。我曾考虑过使用合并排序,但是时间复杂度为O(n log n)。
答案 0 :(得分:0)
使用bottom up natural merge sort。如果不需要稳定性,则使用乱序来指示运行结束(代码也将需要使用数组的结尾作为运行结束)。如果需要稳定性,则需要创建第二个计数(或指针)数组来跟踪运行边界,以防止由于合并过程中有两个或多个运行顺序而将两个或多个运行视为一个运行。由于初始状态为log(n)运行,因此自下而上的自然合并排序将采用log(log(n))传递,从而获得O(n log(log(n))时间复杂度。