数组奇偶划分

来源:互联网 发布:mac口红是什么牌子 编辑:程序博客网 时间:2024/06/10 04:12

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。

情况一

不需要保证奇数和偶数之间相对位置不变。
这里可以用快排的思想。时间复杂度为O(n)

public static int[] reOrderArray(int[] array) {        int left = 0;        int right = array.length - 1;        while (left < right) {            while (left < right && array[left] % 2 == 1) {                left++;            }            while (left < right && array[right] % 2 == 0) {                right--;            }            int tmp = array[left];            array[left] = array[right];            array[right] = tmp;        }        return array;    }

情况二

保证奇数和奇数,偶数和偶数之间的相对位置不变。

(1)新建一个数组,时间复杂度为O(n),空间复杂度为O(n)

public static int[] reOrderArray(int[] array) {        int[] result = new int[array.length];        int j = 0;        for (int i = 0; i < array.length; i++) {            if (array[i] % 2 == 1) {                result[j] = array[i];                j++;            }        }        for (int i = 0; i < array.length; i++) {            if (array[i] % 2 == 0) {                result[j] = array[i];                j++;            }        }        return result;    }

(2)利用插入排序的思想,时间复杂度为O(n^2),空间复杂度为O(1)

public void reOrderArray(int [] array) {        for(int i=1;i<array.length;i++){            if(array[i]%2==1){                int tmp=array[i];                int j=i-1;                while(j>=0 &&array[j]%2==0){                    array[j+1]=array[j];                    j--;                }                array[j+1]=tmp;            }        }    }
原创粉丝点击