【劍指Offer學習】【面試題14 :調整陣列順序使奇數位於偶數前面】
題目:
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位予陣列的後半部分。
思路:
把奇數放在陣列的前半部分, 偶數放在陣列的後半部分,因此所有的奇數應該位於偶數的前面。也就是說我們在掃描這個陣列的時候, 如果發現有偶數出現在奇數的前面,我們可以交換它們的順序,交換之後就符合要求了。
因此我們可以維護兩個指標,第一個指標初始化時指向陣列的第一個數字,它只向後移動:第二個指標初始化時指向陣列的最後一個數字, 它只向前移動。在兩個指標相遇之前,第一個指標總是位於第二個指標的前面。如果第一個指標指向的數字是偶數,並且第二個指標指向的數字是奇數,我們就交換這兩個數字。
程式碼:
void oddEvenSort (int *numArray, int numLength) {
if (numArray == NULL || numLength == 0) {
return;
}
int startIndex = 0;
int endIndex = numLength - 1;
while (startIndex < endIndex) {
// 從前往後找 找到 偶數
while (startIndex < endIndex && numArray[startIndex] % 2 != 0) {
startIndex++;
}
// 從後往前找 找到 奇數
while (startIndex < endIndex && numArray[endIndex] %2 == 0) {
endIndex--;
}
int temp = numArray[startIndex];
numArray[startIndex] = numArray[endIndex];
numArray[endIndex] = temp;
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
int array[] = {1, 4, 5, 10, 8, 7};
oddEvenSort(array, 0, 5);
for (int tmpIndex = 0; tmpIndex < 6; tmpIndex++) {
NSLog(@"%d", array[tmpIndex]);
}
}
return 0;
}
相關文章
- 劍指offer面試題14 調整陣列順序使奇數位於偶數前面面試題陣列
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 面試題21:調整陣列順序奇數位於偶數前面面試題陣列
- JZ-013-調整陣列順序使奇數位於偶數前面陣列
- [每日一題] 第十一題:調整陣列順序使奇數位於偶數前面每日一題陣列
- LeetCode題解(Offer21):調整陣列順序使奇數位於偶數前面(Python)LeetCode陣列Python
- 調整陣列順序使奇數位於偶數前面,偶數和偶數之間的相對位置不變陣列
- 【C語言】調整陣列使奇數全部都位於偶數前面。C語言陣列
- 【劍指offer】調整陣列順序陣列
- 演算法學習記錄十一(C++)--->調整陣列順序使奇數前偶數後演算法C++陣列
- 陣列進行奇數和偶數操作 把奇數放在陣列前面 偶數放在陣列後面陣列
- 面試演算法題(4)--將一個整數陣列中的所有奇數放到偶數前面面試演算法陣列
- 劍指offer面試題11 數值的整數次方面試題
- 第三章:查詢與排序(下)------------- 3.8題解_調整陣列順序-奇數在左偶數在右排序陣列
- 劍指offer之順序列印陣列陣列
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 【劍指offer】字串轉整數字串
- 【劍指offer】把陣列排成最小的數陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 劍指offer面試題12 列印1到最大的n位數面試題
- 【劍指offer】數字在排序陣列中出現的次數排序陣列
- 劍指Offer--陣列中重複的數字陣列
- 劍指Offer-34-把陣列排成最小的數陣列
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 《劍指offer》:[51]陣列中的重複數字陣列
- 《劍指offer》:[38]數字在排序陣列中出現的次數排序陣列
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 《劍指offer》:[41]陣列中和為S的兩個數陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 《劍指offer》:[49]把字串轉化成整數字串
- 劍指 offer(1) -- 陣列篇陣列
- 劍指Offer-39-數字在排序陣列中出現的次數排序陣列
- 劍指OFFER-數字在升序陣列中出現的次數(Java)陣列Java