剑指offer--算法题--18--调整数组顺序

题目描述:

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

输入:

每个输入文件包含一组测试案例。
对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。
接下来的一行输入n个整数。代表数组中的n个数。

输出:

对应每个测试案例,
输入一行n个数字,代表调整后的数组。注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。

样例输入:
5
1 2 3 4 5
样例输出:

1 3 5 2 4

package jzoffer;

public class E14ReorderArray {
	public void order(int [] arr){//这个和快速排序的思想很像,我们可以按照快排的思想来思考这个问题
		if(arr == null) return;
		int i = 0;//定义一个i指针,指向起始位置
		int j = arr.length - 1;//定义一个y指针,指向最后的位置
		while(i<j){
			if(isEven(arr[i]) && !isEven(arr[j])){
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}else if(!isEven(arr[i]) && isEven(arr[j])){
				i++;
			}else if(isEven(arr[i]) && isEven(arr[j])){
				j--;
			}else{
				i++;
				j--;
			}
		}
	}
	public boolean isEven(int n){
		return (n%2) == 0;
	}
	public E14ReorderArray() {
	}
	public static void main(String[] args) {
		E14ReorderArray test = new E14ReorderArray();
		int[] arr ={1,2,3,4,5,6,7,8,9,10};
		System.out.println("原先的数组如下:");
		for(int i = 0;i<arr.length;i++){
			System.out.print(arr[i]+",");
		}
		test.order(arr);
		System.out.println("");
		System.out.println("经过整理的数组如下:");
		for(int i = 0;i<arr.length;i++){
			System.out.print(arr[i]+",");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80517054