文章目錄
- 題目
- 題解一
- 題解二
題目
輸入一個整數陣列,實作一個函式來調整該陣列中數字的順序,使得所有的奇數位于陣列的前半部分,所有的偶數位于陣列的后半部分,并保證奇數和奇數,偶數和偶數之間的相對位置不變,
題解一
使用輔助陣列
- 第一次遍歷:遇到奇數直接放入新陣列
- 第二次遍歷:遇到偶數放入新陣列
- 進行陣列copy
/**
* 方法一:
* 使用輔助陣列
* 第一次遍歷:遇到奇數直接放入新陣列
* 第二次遍歷:遇到偶數放入新陣列
* 進行陣列copy
* @param array
*/
public void reOrderArray(int [] array) {
int[]newArr = new int[array.length];
int index = 0;//新陣列指標
//放奇數
for(int i=0;i<array.length;i++){
if(array[i]%2 != 0){
newArr[index++] = array[i];
}
}
//放偶數
for(int i=0;i<array.length;i++){
if(array[i]%2 == 0){
newArr[index++] = array[i];
}
}
//陣列copy
for(int i=0;i<array.length;i++){
array[i] = newArr[i];
}
}
題解二
初始化操作:記錄一個變數i表示已經將奇數放好的下一個位置,顯然最開始i=0,表示還沒有一個奇數放好,
j 表示陣列的下標,初始值為0, 表示從下標0開始遍歷,
- 如果遇到偶數,j++
- 如果遇到奇數,假設位置為j,就將此奇數插入到i所指的位置,然后i往后移動一個位置,在插入之前,顯然會涉及到資料的移動,也就是將[i,j-1]整體往后移動,
- 直到整個陣列遍歷完畢,結束




public void reOrderArray2(int[] array) {
int i = 0;
for (int j = 0; j < array.length; ++j) {
if (array[j] % 2 != 0) {
int temp = array[j];
for (int k = j - 1; k >= i; --k) {
array[k + 1] = array[k];
}
array[i++] = temp;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/254103.html
標籤:其他
上一篇:從未看過原始碼,到底該如何入手?分享一次完整的原始碼閱讀程序
下一篇:位運算 學習筆記
