题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
小白在这里用了两种方法。
①新定义了一个数组lastarray[ ] ,然后把array从头到尾遍历了一下,将遍历到的奇数,从头到尾放到lastarray中。再把array从尾到头遍历了一下,将遍历到的偶数,从尾到头放到lastarray中。因为题目最后要的是array,只好将lastarray中的每一个元素再放到array中。
②这种方法类似于“冒泡排序”。先将遍历到的最后一个偶数放到最后,一直到所有的偶数都放到最后。这种遍历是不会影响顺序的。
注意:
在第一种方法中,要注意array和lastarray的长度,使得定义的量不要溢出。
小笔记:
&&关系并
||关系或
public class Solution {
public void reOrderArray(int [] array) {
int[] lastarray = new int[array.length];
//定义一个数组lastarray,必须写数组长度
int m = 0;//lastarray中的从前往后计数
int n = array.length-1;//lastarray中从后往前计数
for(int i = 0 ; i <= array.length-1; i++){//从头到尾遍历array
if(array[i]%2 == 1 && m < array.length){//将奇数从前往后放入lastarray
lastarray[m] = array[i];
m++;
}
}
for(int j = array.length-1 ; j >= 0 ; j--){//从尾到头遍历lastarray
if(array[j]%2 == 0 && n >= 0){//将偶数从后往前放入lastarray
lastarray[n] = array[j];
n--;
}
}
for(int k = 0;k < array.length; k++){//让array等于lastarray
array[k] = lastarray[k];
}
}
}
public class Solution {
public void reOrderArray(int [] array) {
for(int i = 0 ; i <= array.length-2 ; i++){
for(int j = 0 ; j <= array.length-2-i ; j++){
if(array[j]%2==0 && array[j+1]%2==1){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
}