我試圖在一次通過時分別將偶數和奇數分別分離到左側和右側。此外,我想確保這些數字按照順序排序,這樣整個邏輯將具有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--;
}
}
}
你的問題究竟是什麼? – Skam
對O(n)中的數組進行排序 - 你不是要求太多嗎? –
給定的數組是否已經排序? –