剑指Offer:调整数组顺序使奇数位于偶数前面
剑指Offer:调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目分析
给定的是整数数组,但其实只有两类数,即奇数和偶数,我们并不需要关注数组元素的数字大小,可以将奇数看作A,偶数看作B,即对数组作如下变换:
此时,这道题目就是对一个数组中的A、B两元素进行排序了,但是题目要求奇数与奇数、偶数与偶数的相对位置不变,即怕我们必须进行稳定性排序。
最简单的稳定排序方法有:
- 归并排序
- 直接插入排序
- 冒泡排序
这三种算法均可以满足题目要求,此处,我们以冒泡排序为例。
我们需要注意的是,相比传统排序比较相邻数字的大小关系转变了奇偶关系,即保证偶数往右边移动且保证稳定性的基础是,交换原则是左边数字是必须是偶数,右边数字必须是是奇数。
Java题解
/** * 冒泡排序 * @param array */ public void reOrderArray(int [] array) { for(int i= array.length-1;i>=0;i--){ for(int j=0;j+1<=i;j++){ if(array[j]%2==0&&array[j+1]%2==1){ swap(array,j,j++); } } } }