【发布时间】:2016-04-25 21:06:37
【问题描述】:
我试图一次将偶数和奇数分别向左和向右隔离。另外,我想确保这些数字按 asc 顺序排序,这样整个逻辑的复杂度就会为 O(n)。
例如如果我的输入是 {9,8,2,3,11,10,1};
这个逻辑我将 o/p 实现为 {10 8 2 3 11 9 1 } 但我想确保我的输出在同一次传递中排序为 { 2,8,10,1,3,9,11}。
static void segregateEvenOdd(int arr[]) {
/* Initialize left and right indexes */
int left = 0, right = arr.length - 1;
while (left < right) {
/* Increment left index while we see 0 at left */
while (arr[left] % 2 == 0 && left < right)
left++;
/* Decrement right index while we see 1 at right */
while (arr[right] % 2 == 1 && left < right)
right--;
if (left < right) {
/* Swap arr[left] and arr[right] */
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
【问题讨论】:
-
你的问题到底是什么?
-
在 O(n) 中对数组进行排序 - 你是不是要求太多了?
-
给定的数组是否已经排序?
-
最好的排序算法——归并排序——给你 O(nlogn) 所以你不可能达到 O(n)
-
我用示例编辑了我的问题。
标签: java algorithm data-structures