arrays - 对数组中的偶数和奇数进行排序,同时保持顺序

标签 arrays algorithm sorting partition

http://www.geeksforgeeks.org/segregate-even-and-odd-numbers/我在查找面试问题时发现了这个有趣的问题。该算法看起来很简单,但我想知道是否可以在不使用任何额外空间的情况下保持偶数和奇数的顺序,同时仍然保持 O(n) 的时间复杂度。

例如

input: {12, 34, 45, 9, 8, 90, 3}

output: {12, 34, 8, 90, 45, 9, 3}

编辑:如果没有额外的空间就不可能,它可以使用仅重新排列的整数吗?因为交换只能发生在数组中

最佳答案

我认为这不太可能,因为没有额外的空间(取决于n),你将不得不交换元素,从而打乱它们(或者你可以移动数组中的 block ,但这可能需要非线性总体时间;据我所知,问题中不允许使用其他数据结构,例如链表)。

这个问题可以被视为稳定的就地非比较排序,其中所有偶数元素都映射到零,所有奇数元素都映射到一进行比较,并且似乎没有算法匹配这些标准(稳定,时间) O(n),额外内存O(1))(参见 https://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_of_algorithms 处的“非比较排序”表)。

关于arrays - 对数组中的偶数和奇数进行排序,同时保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315151/

相关文章:

javascript - 如何将速度数组 [x, y, z] 转换为要存储在数据库中的字符串?

algorithm - 算法时间复杂度计算

ios - 查找关闭多边形 iOS 的总数

algorithm - 使用 BubbleSort 完全排序所需的遍数?

c - 在数组值中显示额外数据

php - 通过多维数组循环出现问题

algorithm - 用于检测具有无限端的重叠周期的优雅算法

sql - 在postgresql中拆分字符串和排序

javascript - 如何按对象的值对对象数组进行排序

C - strcmp() 数组中的两个字符串