本文参考自《剑指offer》一书,代码采用Java语言。

更多:《剑指Offer》Java实现合集  

题目

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

思路

  对于任意一个整数数组,设置一个指针,从前往后走,如果遇到奇数则指针后移,遇到偶数时,希望把该偶数放在数组后面;因此,再设置一个指针,从后往前走,遇到偶数时指针前移,遇到奇数时,则恰好可以与前面的指针所指的偶数进行调换。

测试算例 

  1.功能测试(数组中奇偶数交替出现;数组中先奇数后偶数;数组中先偶数后奇数)

  2.特殊测试(null,空数组,一个数据的数组)

完整Java代码

(含测试代码)

package _21;

import java.util.Arrays;

/**
 * 
 * @Description 调整数组顺序使奇数位于偶数前面 
 *
 * @author yongh
 * @date 2018年10月11日 上午10:12:01
 */

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

public class ReorderArray {
	
    public void reOrderArray(int [] array) {
        if(array==null || array.length==0)
            return;
        int length = array.length;
        int low=0;
        int high=length-1;
        int temp;
        while(low<high){
        	//向后移动low指针,直到它指向偶数
            while(low<length && (array[low]&1)!=0)
                low++;
            //向前移动high指针,直到它指向奇数
            while(high>=0 && (array[high]&1)==0)
                high--;
            if(low<high){               
                temp=array[low];
                array[low]=array[high];
                array[high]=temp;
            }
        }
    }
    
    //===============测试代码===================
    void test1() {
    	int[] array = null;
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
    void test2() {
    	int[] array = {};
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
    void test3() {
    	int[] array = {-2,4,-6,1,-3,5};
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
    void test4() {
    	int[] array = {-1,3,-5,2,-4,6};
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
    void test5() {
    	int[] array = {-1,2,-3,4,-5,6};
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
    void test6() {
    	int[] array = {2,2,1,3,4,1};
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
    void test7() {
    	int[] array = {1};
    	System.out.println("原始数组:"+Arrays.toString(array));
    	reOrderArray(array);
    	System.out.println("调整结果:"+Arrays.toString(array));
    	System.out.println();
    }
    
	public static void main(String[] args) {
		ReorderArray demo = new ReorderArray();
		demo.test1();
		demo.test2();
		demo.test3();
		demo.test4();
		demo.test5();
		demo.test6();
		demo.test7();
	}

}

  

test1 passed!
test2 passed!
test3 passed!
test4 passed!
test5 passed!
test6 passed!
ReorderArray

相关文章:

  • 2021-06-14
  • 2021-10-13
  • 2022-01-25
  • 2021-11-29
  • 2021-10-31
  • 2022-12-23
  • 2021-09-09
猜你喜欢
  • 2021-07-01
  • 2021-07-23
  • 2022-12-23
  • 2022-02-22
  • 2021-08-24
  • 2021-08-31
相关资源
相似解决方案