调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
public class Solution { public void reOrderArray(int [] array) { int start = array.length; // 先找到第一个偶数的位置 for(int i = 0; i < start; i++){ if((array[i] & 1) == 0){ start = i; } } //遇到奇数时,就向前进行交换操作 for (int i = start + 1; i < array.length; i++) { if ((array[i] & 1) == 1){ int j = i; while (j > start){ int temp = array[j]; array[j] = array[j-1]; array[j-1] = temp; j--; } start++; } } } }
注:上面的解法满足了前提条件,保持原数组中奇数和奇数、偶数和偶数的相对位置不变。
如果没有这个限制条件,还可以采用下面的解法。
public void reOrderArray(int [] array) { int i = 0, j = array.length - 1; while (i < j){ // 直到指到偶数 while ((array[i] & 1) != 0){ i++; } //直到指到奇数 while ((array[j] & 1) == 0){ j--; } if (i < j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; } } }

浙公网安备 33010602011771号