剑指offer——实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

1. 题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

2. 算法概述

通过count统计奇数个数,通过index指针进行遍历数组,如果新的奇数的index不为count,则该奇数前必有偶数,将count到index区间内的数互换,count++[奇数个数+1]

3. 算法实现
 public void reOrderArray(int [] array) {
        int count = 0;//用于记录已经排序的奇数个数
        int index = 0;
        
        while(index < array.length){
            if((array[index] & 1) == 1){//按位与判断数字是否为奇数
                if(index != count){//判断奇数是否相连,若index!=count,奇数前有偶数,需要交换
                    //以下为将该不连续奇数[前面有偶数]换至连续
                    int temp = array[index];
                    for(int i = index; i > count; i--){
                        array[i] = array[i-1];
                    }
                    array[count] = temp;
                }
                count++;//统计奇数个数
            }
            index++;//指针前移
        }
    }

猜你喜欢

转载自blog.csdn.net/zhangxudo/article/details/103995003
今日推荐