演算法總結 陣列 陣列移動 左奇右偶

2021-06-01 09:09:42 字數 685 閱讀 3126

給定乙個整形陣列,要求對這個陣列進行操作,移動成左邊部分奇數,右邊部分偶數的形式。

想法:快速排序的劃分方法,原本是根據與某乙個值進行比較進行劃分。更改這個演算法策略為根據每個數的奇偶性進行劃分。

實現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...