給定乙個整形陣列,要求對這個陣列進行操作,移動成左邊部分奇數,右邊部分偶數的形式。
想法:快速排序的劃分方法,原本是根據與某乙個值進行比較進行劃分。更改這個演算法策略為根據每個數的奇偶性進行劃分。
實現1:
/*
*陣列移動,偶數移動到右邊,奇數在左邊
*方式1:用類似與快速排序劃分的方式
*用乙個指標掃瞄,遇到奇數就與已移動過的部分的下乙個元素交換(另乙個指標儲存著已移動好的奇數的右邊界)
*掃瞄一次即可完成,時間複雜度o(n),空間o(1)
*/ void partition(int arr,int n)}}
}
實現2:
int partition(int arr,int n){
int i = 0;
int j = n-1;
while(i
/**方式二:對於php來說,處理方式可以更簡單.
*直接掃瞄陣列,如果是奇數就把值放入left_array,否者放入right_array.然後返回merge的結果
*缺點是需要o(n)的額外空間
*/ function partition($arr){
$left = array();
$right = array();
for($j = 0;$j
將陣列按照偶奇偶奇的順序排序
乙個陣列,一半奇數,一半是偶數,要將陣列按照偶奇偶奇的順序排序 思路,找出下標是偶數但值是奇數的,和下標是奇數但值是偶數的,兩個互換,直到結束 public class sortarraybyparityll sort arr arrays.stream arr foreach s system.o...
陣列移動演算法
ash前段時間貼出了乙個問題 對於有k個元素的陣列 int a k 寫乙個高效演算法將陣列內容迴圈左移m位 比如 int a 6 迴圈左移3位得到結果,要求 1不允許另外申請陣列空間,但可以申請少許變數 2不允許採用每次左移 這是乙個有趣的問題,當時ash給出了乙個很簡單的解法 1 將整個陣列倒排 ...
陣列排序(正數在左,負數在右)
import j a.util.arrays 1,2,3,2,4,5,3,2,4,1,5,3 陣列排序 輸出結果 1,2,3,5,3,4,1,2,4,2,5 要求 1.正數在左,負數在右,2.相對順序不變,3.空間複雜度o 1 public class arraysort arr arr.lengt...