寫在前面:
為了增長一下自己的數(shù)據(jù)結(jié)構(gòu)能力,也為了面試準(zhǔn)備峡继,準(zhǔn)備將劍指Offer做一下冯袍,并與各位分享,希望各位可以對代碼以及思路提提建議,歡迎志同道合者康愤,謝謝儡循。
題目:
輸入一個整數(shù)數(shù)組,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序征冷,使得所有的奇數(shù)位于數(shù)組的前半部分择膝,所有的偶數(shù)位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù)检激,偶數(shù)和偶數(shù)之間的相對位置不變肴捉。
思路:
原數(shù)組 4,2,5,7,8,1 變成 5,7,1,4,2,8
類似于直接插入的方式,從第二個數(shù)據(jù)開始判斷叔收,如果是奇數(shù)就查詢前面的一個數(shù)據(jù)齿穗,判斷是奇數(shù)還是偶數(shù),如果是偶數(shù)饺律,將這個數(shù)插入前面一個數(shù)窃页,如果前面一個數(shù)是奇數(shù),就不動复濒,最核心的是脖卖,只要是找到了奇數(shù),那么就向前找巧颈,直到找到前面的奇數(shù)畦木,然后把這個數(shù)放在前面奇數(shù)的后面。如果找到了第一個還不是奇數(shù)洛二,那么就把這個奇數(shù)放在第一位馋劈,
代碼實現(xiàn)
package com.itzmn.offer;
/**
* @Auther: 張夢楠
* @Date: 2018/7/30 09:39
* 簡書:http://www.reibang.com/u/d611be10d1a6
* 碼云:https://gitee.com/zhangqiye
* @Description:
*
* 2,4,6,1,3,5,7
* 2 1 3 5 7 4 6
*
* 使用類似直接插入方法, 將負(fù)數(shù)直接插入到前面的有序隊列
*
*/
public class Offer13 {
public static void main(String[] args) {
int[] array = {2,4,6,1,3,5,7};
new Offer13().reOrderArray(array);
for (int i:array){
System.out.println(i);
}
}
public void reOrderArray(int [] array) {
for (int i=1;i<array.length;i++){
if (array[i] % 2 == 1){
int temp = array[i];
for (int j=i-1;j>=0;j--){
if (array[j] % 2 == 0){
array[j+1] = array[j];
}
if (array[j] % 2 == 1){
array[j+1] = temp;
break;
}
if (j == 0){
array[0] = temp;
}
}
}
}
}
}
希望大家可以多多指點晾嘶,優(yōu)化一下,
QQ群:552113611