even odd numbers sort

Problem:
Given n random numbers. Move all even numbers on left hand side and odd numbers on right hand side and then sort the even numbers in increasing order and odd numbers in decreasing order
For example, i/p : 3 6 9 2 4 10 34 21 5
o/p: 2 4 6 10 34 3 5 9 21

Solution:

package Arrays;

import java.util.Arrays;
import java.util.Collections;

public class EvenOddSort {
		
	public Integer[] evenOddSort(Integer[] a){
		int i, j;
		i=0; j = a.length-1;
		// move even numbers in first half and odd numbers in secound half
		while(i < j ){
			// even number then go further
			if(a[i]%2 == 0){
				i++;
			}
			// odd number then go further
			else if(a[j]%2 == 1) {
				j--;
			}
			else if(a[i]%2 == 1 && a[j]%2 == 0){
				swap(a, i, j);
				i++;
				j--;
			}			
		}
		// keep the boundary of even and odd indexes correctly
		if(a[i]%2 == 0) {
			i++;
		}		
		
		// sort even numbers in ascending order
		Arrays.sort(a, 0, i);
		// sort odd numbers in descending order
		Arrays.sort(a, i, a.length, Collections.reverseOrder());
		
		return a;
	}
	
	private void swap(Integer[] a, int i, int j){
		int temp = a[i];
		a[i]=a[j];
		a[j]=temp;
	}
	
	private void print(Integer[] a){
		System.out.println("Even Odd sorting");
		for(Integer i : a){
			System.out.print(i+" ");
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		EvenOddSort e = new EvenOddSort();
		Integer[] a = {3, 6, 9, 2, 4, 10, 34, 21, 5};
		//Integer[] a = {11, 10, 6, 9, 3, 1, 2, 33, 2, 5, 4, 4};
		
		//Integer[] a = {12, 67, 1, 34, 9, 78, 6, 31};
		
		e.print(e.evenOddSort(a));

	}

}
This entry was posted in Arrays, Microsoft. Bookmark the permalink.

Leave a comment