第一种思路
使用其他容器存答案,再复制到数组array中
public class Solution {
public void reOrderArray(int [] array) {
//思路:用一个数组第一遍遍历存奇数,第二遍遍历存偶数
int[] a = new int[array.length];
int t=0;
for(int i = 0;i<array.length;i++){
if(array[i]%2==1){
a[t++]=array[i];
}
}
for(int i = 0;i<array.length;i++){
if(array[i]%2==0){
a[t++]=array[i];
}
}
for(int i = 0;i<array.length;i++){
array[i] = a[i];
}
}
} 第二种思路从末尾遍历,若元素为奇数,则在该元素的左边找到最接近的偶数,使得 偶数 与 奇数元素块 互换位置
举例:12346587 首先对元素a[7]=7 8与7互换 12346578 对元素7 6与57互换 12345768 对元素7 4与57互换 12357468 对元素7 2与357互换 13572468 END!!!
public class Solution {
public void reOrderArray(int [] array) {
//思路:从末尾遍历,奇数与偶数互换位置
for(int i = array.length-1;i > 0;i--){ //遍历找到奇数a[i]
if((array[i]%2) == 1){
for(int j = 1;j <= i;j++){ //遍历找到与a[i]左边最接近的偶数a[i-j]
if((array[i-j]%2)==0){
int t = array[i-j];
for(int h = i-j;h <i;h++){ //这是偶数与奇数块(a[i]--a[i-j+1])互换
array[h] = array[h+1];
}
array[i] = t;break;
}
}
}
}
}
} 第三种思路: 类似冒泡排序
public class Solution {
public void reOrderArray(int [] array) {
//思路:类似冒泡排序
for(int i = 0 ; i < array.length -1 ; i++){
for(int j = array.length - 1;j > 0;j--){
if((array[j]%2==1)&&(array[j-1]%2==0)){
int t = array[j];array[j]=array[j-1];array[j-1]=t;
}
}
}
}
} ------END!

京公网安备 11010502036488号