您的位置:首页 > Web前端

剑指offer之编程(九)

2016-05-22 23:20 267 查看
题目描述:

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

思路:

看到题目,由于题目要求是将所有的偶数都放在后半部分,可以想到遍历数组,遇到一个偶数就将其放到数组最后,这样遍历一次数组即可完成。另一种比较好的是使用快排的思路,熟悉快排就可以知道,可以使用两个指针 head 和 tail,分别从头和尾开始遍历,当head指向的偶数,tail指向的是奇数,那么就交换,直到head指向的位置在tail之后即可。不过这种算法不能保证偶数或奇数之间的原来的先后顺序,但第一个算法可以保证这个原有的顺序。

代码如下:

import java.util.*;

public class Main15
{

public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int a[] = new int
;
for(int i=0;i<n;i++)
{
a[i] = s.nextInt();
}

a = reArray(a);

for(int i=0;i<n;i++)
{
System.out.println(a[i]);
}

}

public static int[] reArray(int []array)
{
if(array==null || array.length==0)
return null;

int headIndex = 0; //头指针
int tailIndex = array.length-1; //为指针

while(headIndex<tailIndex)
{
while(headIndex<tailIndex && (array[headIndex]%2)!=0) //0x1是16进制的数,0x是16进制数的标志,0x1和一个数做与(&)运算可以判断这个数的奇偶性
{
headIndex++;
}

while(tailIndex>headIndex && (array[tailIndex]%2)==0) //循环找出奇数
{
tailIndex--;
}

if(headIndex<tailIndex) //交换位置
{
int i = array[headIndex];
array[headIndex] = array[tailIndex];
array[tailIndex] = i;
}
}

return array;
}
}


本人经验,仅供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 编程