剑指Offer——调整数组顺序使奇数位于偶数前面

来源:互联网 发布:网速监控软件 编辑:程序博客网 时间:2024/05/22 05:14

问题描述

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

解题思路

首先想到的是冒泡,把奇数往前面冒,偶数往下沉,奇偶相遇则交换

程序如下:

public class Solution {    public void reOrderArray(int [] array) {        for(int i=0; i<array.length-1; i++){            for(int j=0; j<array.length-i-1; j++){                if(array[j]%2==0 && array[j+1]%2!=0){                    array[j] ^= array[j+1];                    array[j+1] ^= array[j];                    array[j] ^= array[j+1];                }            }        }    }}

改进版,记录最后交换的位置,减少不必要的比较操作

public class Solution {    public void reOrderArray(int [] array) {        int record = array.length-1;        int pos = 0;        for(int i=0; i<array.length-1; i++){            for(int j=0; j<record; j++){                if(array[j]%2==0 && array[j+1]%2!=0){                    array[j] ^= array[j+1];                    array[j+1] ^= array[j];                    array[j] ^= array[j+1];                    pos = j;                }            }            record = pos;        }    }}
阅读全文
0 0
原创粉丝点击