原创微博,转载请注明出处。
问题描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:从 左向右 扫描给出的array数组
- j 指向的当前偶数所在位置;
- i 为从左项右扫描数组,当array[i]为奇数时,array[j] array[j+1] array[j+2]... array[i-1]依次向右移动至 array[j+1] array[j+2] array[j+3]... array[i]位置,原 array[i] 调整至原 array[j] 所在位置。
- 当把数组扫描完时结束,即 i=array.length时结束。
扫描(数组元素移动过程如下图所示):其中 temp 保存原 array[i] 值,right 保存需要移动的元素值的下标位置。
初始态:
java代码如下:
public void reOrderArray(int [] array) {
int temp, right;
for(int i=0,j=0; i<array.length; i++) {
if((array[i]&1) !=0 ) {
right = i;
temp = array[right];
while(j<right) {
array[right] = array[--right];
}
array[j] = temp;
j++;
}
}
//for(int i=0; i<array.length; i++)
//System.out.println(array[i]);
}
欢迎留言讨论^_^