题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
插入排序的思想
- 遍历数组,将遍历的第一个奇数(坐标 i)依次与前一个偶数(坐标 i - 1)对换位置
- 记录已调整顺序的奇数的个数,后续的遍历,遍历至当前记录值即可
冒泡排序思想待完善
代码:
package 调整数组顺序使奇数位于偶数前面;
public class Demo {
public static void main(String[] args) {
int arr[] = { 2, 4, 6, 1, 3, 5, 7 };
Solution solution = new Solution();
solution.reOrderArray(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}
class Solution {
/*
* 插入排序思想
*/
public void reOrderArray(int[] array) {
int k = 0; // 记录已调整顺序的奇数的个数,后续的遍历,遍历至当前记录值即可
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 == 1) {
int j = i;
while (j > k) { // j >= k+1,依次与前面的偶数替换
int tmp = array[j];
array[j] = array[j - 1];
array[j - 1] = tmp;
j--;
}
k++;
}
}
}
// /**
// * 类似冒泡的遍历方式
// * @param array
// */
// public void reOrderArray(int[] array) {
// for (int i = 0; i < array.length + 5; i++) { // 遍历的次数,与数组长度相等
// for (int j = array.length - 1 - i; j > 0; j--) { // 从后往前遍历,每次遍历过后,第 i - 1 位的值都已确定为奇数
// if (array[j] % 2 == 1 && array[j - 1] % 2 == 0) { // 前偶后奇交换
// swap(array,j,j - 1);
// for (int j2 = 0; j2 < array.length; j2++) {
// System.out.print(array[j2]);
// }
// }
// }
// System.out.println(" ");
// }
// }
//
// public static void swap(int[] arr, int i, int j) { //注意!!!引用数据类型的改变需要传递地址,不能只传递元素
// int x = arr[i];
// int y = arr[j];
// arr[i] = y;
// arr[j] = x;
// }
}