Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在线性时间和恒定空间中交替排列两个排序序列的数组排序_Java_Algorithm_Sorting_Data Structures - Fatal编程技术网

Java 在线性时间和恒定空间中交替排列两个排序序列的数组排序

Java 在线性时间和恒定空间中交替排列两个排序序列的数组排序,java,algorithm,sorting,data-structures,Java,Algorithm,Sorting,Data Structures,这是我今天在一次采访中被问到的,在盯着这个问题看了5分钟后被踢了出去 给定一个数组A,使得所有奇数位置的子序列([A1,A3,A5,…])和所有偶数位置的子序列([A2,A4,A6,…])都是按排序顺序排列的,例如[1,7,2,8,3,9,4,10,5]或[3,8,4,11,5]或[5,2,7,4]-在O(n)时间和O(1)空间(包括堆栈空间和输出数组空间)中排序A 在过去的两个小时里,我绞尽脑汁,挑我朋友的毛病。谷歌没有给出任何答案。我不想给任何意见涂上颜色,但我觉得在给定的复杂情况下,这可能

这是我今天在一次采访中被问到的,在盯着这个问题看了5分钟后被踢了出去

给定一个数组A,使得所有奇数位置的子序列([A1,A3,A5,…])和所有偶数位置的子序列([A2,A4,A6,…])都是按排序顺序排列的,例如[1,7,2,8,3,9,4,10,5]或[3,8,4,11,5]或[5,2,7,4]-在O(n)时间和O(1)空间(包括堆栈空间和输出数组空间)中排序A

在过去的两个小时里,我绞尽脑汁,挑我朋友的毛病。谷歌没有给出任何答案。我不想给任何意见涂上颜色,但我觉得在给定的复杂情况下,这可能不可能解决

我们如何解决这个问题?如果(1)两个交织序列在取消交织时可以形成一个单调序列,并且(a)数组以最小数开始且长度为奇数,或者(b)数组以第二个序列的最小数开始(取消交织时将位于右侧的序列)如果是等长的,我们可能可以反转中描述的算法

我们必须先执行“循环先导”序列,然后执行循环移位

例1

[1, 7, 2, 8, 3, 9, 4, 10, 5]
 1  2  3  4  5  6  7   8  9
 1  6  2  7  3  8  4   9  5

|1| unaffected

   |1     3                |
   m = 4; 2m = 3^2 - 1
   cycles start on 3^0, 3^1
   (4 swaps with 7 and the other
    numbers form a longer cycle.)
示例2(简单):


我不希望任何人在没有被允许调查的情况下在面试中提出这个问题:)

你确定这不是一个骗人的问题吗?我认为你能做的最好的就是O(n logn)。在一个算法MOOC中有一次向我解释过它,尽管我记不起它背后的推理。O(n logn)是你能达到的最小值。找到它后,基于比较的排序不能比O(n logn)快:O(1)吗假设就地排序?是否可以跳过一些比较,因为我们知道备用元素已排序?如果这个问题不是O(1)空间,这是一个简单的排序合并。现在的问题是,这在恒定空间中是否可能@管理层收购(MBo)并没有得到确切的澄清。额外的空间不应该取决于阵列的大小。这看起来很酷,但我似乎没有想到。伪代码可能吗?@AntarikshaYelkawar抱歉,我刚刚注意到你的评论。我是说,似乎编写代码有点复杂。文章中的算法或我的建议是否有助于您更好地理解?
[1, 5, 2, 7, 3]
 1  2  3  4  5
 1  4  2  5  3

|1| unaffected

   |          |
   m = 1
   cycle in 2m => 2, 5
   cycle in 2m => 3, 7
   cycle shift by m between 5 and 3
   => 2, 3, 5, 7