調整陣列順序使奇數字於偶數前面

2021-08-20 19:49:46 字數 2413 閱讀 2470

題目描述

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。(相對位置:兩數之間位置,比如:{1,2,3,4,5},偶數間,2的相鄰偶數為4,那麼調整陣列後,2的相鄰偶數也必須為4)。

思路:

用兩個索引,乙個指向陣列的第乙個數字,把第二個索引指向陣列的最後乙個數字,然後第乙個索引往後移動,直到碰到第乙個偶數,第二個索引往前移動,指導碰到第乙個奇數,如果第乙個索引小於第二個索引,那麼就交換兩個索引的值,然後重複上述操作,直到第乙個索引大於第二個索引,結束操作,此時,陣列中所有的奇數都將位於偶數前面。

例如:有一陣列,現第乙個索引指向陣列中的第乙個數1,第二個索引指向陣列的最後乙個數8,第乙個索引開始往後移動,找到第乙個偶數,此時,索引指向的值為2。第二個索引開始移動,直到遇到第乙個奇數,此時第二個索引指向的值為7,因為此時第乙個索引所指值的下標為1,小於第二個索引所指值得下標6,所以交換2和7得位置,此時陣列內容為:.

按照上述操作,重複直到第乙個索引小於第二個索引,結束迴圈,陣列得調整完成。

以下有三種解決該操作的方法。其中第一種和第二種的時間複雜度與空間複雜度皆小於第三種方法,但是由於前兩種方法無法解決數字間的相對位置不變,由此需要使用第三種方法來解決相對位置不變的問題。相對於最基本的思想:「從頭遍歷陣列,每遇到乙個偶數,就把後面的數往前移,最後空出的位置插入遇到的偶數。」第三種方法有點空間換時間的概念,直接用兩個陣列來儲存奇偶數,然後遍歷完陣列之後再把偶數陣列的值插入奇數陣列中,時間複雜度o(n)。

using system;

namespace 調整陣列順序使奇數字於偶數前面

; console.write("\nago:");

printarray(arr1);

console.write("\nafter:");

printarray(reorderarray3(arr1));

//test2

console.writeline("\ntest2:");

int arr2 = ;

printarray(reorderarray1(arr2));

//tes3

console.writeline("\ntest3:");

console.writeline("ago:");

printarray(arr1);

console.writeline("after:");

int arr3 = ;

printarray(reorderarray2(arr3));

}/// /// 用於重新排列奇偶數在陣列中的順序,但是該函式無法控制偶數與偶數、奇數與奇數間的相對位置

///

/// 調整的陣列

///

public static int reorderarray1(int array)

}return array;

}//宣告乙個指向函式的委託,用於在函式reorderarray2中呼叫委託作為形參使用

private delegate bool event(int n);

/// /// 用於潘昕排列奇偶數在陣列中的位置,依然無法控制偶數與偶數、奇數與奇數之間的相對位置。但是相對於reorder array1來說,reorder array2減少了資料間的耦合性,可以把isevent作為乙個標準,如果排列的條件做了改變,只需要重新編寫乙個標準(重寫isevent)即可實現新的功能模組,提高了**的重用性,為功能擴充套件提供了便利

///

/// 用於調整的陣列

///

public static int reorderarray2(int array)

/// /// 此函式是把reorderarray1分解成兩部分的第一部分,用於判斷數字應該在陣列前半部分還是後半部分

///

/// 調整的陣列

/// 分組的標準,可以重寫標準來改變函式的分組

///

private static int reorder(int array,event isevent)

/// /// 用於測試的乙個新標準,把能整除3的值列為乙個新的分組放在陣列的後面

///

/// 傳入需要判斷的數

///

private static bool isevent2(int n)

public static int reorderarray3(int array)

else

oushu[ou++] = array[i];

}for(int i = 0; i < ou; i++)

return arr;

}private static void printarray(int array)}}

}

調整陣列順序使奇數字於偶數前面

題目 輸入乙個整數陣列,調整陣列中數字的順序,使得所有奇數字於陣列的前面部分,偶數字於陣列的後面部分。思路 要求時間複雜度是 n 1 從頭開始掃瞄陣列,確定數是奇數不動,偶數的話就移動陣列最後。這樣每個偶數都要進行移動,最壞的時間複雜度達到 n 2 2 用兩個指標,頭指標指向陣列開始,尾指標指向陣列...

調整陣列順序使奇數字於偶數前面

1 題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。2 解題思路 2.1 最簡單思路,時間複雜度o n2 從頭掃瞄這個陣列,每碰到乙個偶數時,拿出這個數字,並把位於這個數字後面的所有數字往前挪動一位。挪完之後在陣列的末尾有乙個...

調整陣列順序使奇數字於偶數前面

題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。輸入 每個輸入檔案包含一組測試案例。對於每個測試案例,第一行輸入乙個n,代表該陣列中數字的個數。接下來的一行輸入n個整...