剑指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++);
                }
            }
        }
    }
posted @ 2019-12-27 19:31  子烁爱学习  阅读(187)  评论(0编辑  收藏  举报