September Meeting 2007

From DojoWiki

Jump to: navigation, search

September 27th Meeting

Topic Sorting

I worked up part of a MergeSort.. Here is the Java code.

package org.pghcodingdojo.sorting ;


public class Sorter {
    private static int[] unsortedArray = new int[] {38, 27, 43, 3, 9, 82, 10} ;
    public static void main(String[] args) {

		int[] sortedList = mergeSort(unsortedArray) ;
		for (int i : sortedList) System.out.println("" + i) ; 
	}

    private static int[] mergeSort(int[] unsortedArray) {
        int middle = unsortedArray.length / 2;
        int[] left = new int[middle];
        int[] right = new int[unsortedArray.length - middle];
        
        int[] result = new int[unsortedArray.length];
        if (unsortedArray.length <= 1) {
            return unsortedArray;
        } else {

            for (int i = 0; i < middle; i++) {
                left[i] = unsortedArray[i];
            }
            
            for (int j = 0, i = middle; i < unsortedArray.length; i++, j++) {
            	int insert = unsortedArray[i];
            	System.out.printf("unsortedArray length is %x Array Length is %x and index is %x\n", 
            			unsortedArray.length, right.length, j) ; 
            	right[j] = insert ; 
            }
            left = mergeSort(left);
            right = mergeSort(right);
            result = merge(left, right) ;
            return result;

        }

    }

    private static int[] merge(int[] left, int[] right) {
        int[] result = new int[left.length + right.length];
        int resultAppendIdx = 0 ; 
        int leftCounter = left.length ;
        int rightCounter = right.length ;
        while (leftCounter > 0 && rightCounter > 0) {
        	if (left[0] <= right[0]) {
        		result[resultAppendIdx++] = left[0] ; 
        		
        		int[] temp = new int[left.length-1] ; 
        		for (int i = 1; i<left.length; i++) {
        			temp[i-1] = left[i] ;  
        		}
        		left = temp ; 
        		
        	}
        	else {
        		result[resultAppendIdx++] = right[0] ;
//shift array values, and drop the first index...
        		int[] temp = new int[right.length-1] ; 
        		for (int i = 1; i<right.length; i++) {
        			temp[i-1] = right[i] ;  
        		}
        		right = temp ; 
        	}
        	leftCounter = left.length ; 
        	rightCounter = right.length ;
        	
        }
        if (left.length > 0) {
    		for (int i : left) result[resultAppendIdx++] = i ; 
    	}
    	if (right.length > 0) {
    		for (int i : right) result[resultAppendIdx++] = i ; 
    		
    	}
        

        return result ; 
    }

}
Personal tools