题目:调整数组顺序使奇数位于偶数前面。
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
算法分析:
此题并没有强调要保证排序后的顺序,只需要将所有奇数位于前面,偶数位于后面即可。
可以设计两个指针p1,p2,第一个指针初始化指向数组的第一个数字,它只向后移动;第二个指针初始化指向数组的最后一个数字,
它指向前移动;在两个指针相遇之前,第一个指针总是位于第二个指针的前面,即程序中通过while(i<j)判断。如果第一个指针指向的
数字是偶数,并且第二个指针指向的数字是奇数,则交换这两个数字;循环进行,直到全部对换完为止。
Java代码实现
/**************************************************************
* Copyright (c) 2016,
* All rights reserved.
* 版 本 号:v1.0
* 题目描述:调整数组顺序使奇数位于偶数前面
* 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
* 输入描述:请任意输入一个数组:
* 1,2,4,5,8,7,9,13,6,10
* 程序输出: 奇偶排序后的数组是:
* 1,13,9,5,7,8,4,2,6,10,
* 问题分析: 1.对输入的字符串转化为整数数组的问题。详见主函数
* 2.将字符串转化为数字方法:Integer.parseInt(str);
* 算法描述:此题并没有强调要保证排序后的顺序,只需要将所有奇数位于前面,偶数位于后面即可。
* 可以设计两个指针p1,p2,第一个指针初始化指向数组的第一个数字,它只向后移动;第二个指针初始化指向数组的最后一个数字,
* 它指向前移动;在两个指针相遇之前,第一个指针总是位于第二个指针的前面,即程序中通过while(i<j)判断。如果第一个指针指向的
* 数字是偶数,并且第二个指针指向的数字是奇数,则交换这两个数字;循环进行,直到全部对换完为止。
* 完成日期:2016-08-22
***************************************************************/
package org.marsguo.offerproject;
import java.util.Scanner;
class ReorderArray{
private int p1,p2;
public ReorderArray(int[] arr){
int[] a = new int[arr.length];
int i=0;
int j=arr.length-1;
while(i<j){
p1 = arr[i];
p2 = arr[j];
if(p1%2 != 0){
i++;
}
else if(p2%2 ==0){
j--;
}
else{
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
System.out.println("奇偶排序后的数组是:");
for(int k = 0 ;k < arr.length;k ++)
System.out.print(arr[k] + ",");
}
public void print(int[] a){
}
}
public class ReorderOddEven {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请任意输入一个数组(以“,”隔开):");
String str = scanner.nextLine();
String[] temp = str.split(",");
int[] array = new int[temp.length];
for(int i = 0;i < temp.length;i++)
{
array[i] = Integer.parseInt(temp[i]);
}
ReorderArray reorderarray = new ReorderArray(array);
reorderarray.print();
}
}
程序运行结果: