Saturday, June 23, 2012

Merge Soft

This is how i implemented the MergeSoft in Java

package com.webspherenotes.algo;

public class MergeSort {

  /**
   * @param args
   */
  public static void main(String[] args) {

    int[] inplace = {10,9,8,7,6,5,4,3,2,1,0};
    MergeSort ms = new MergeSort();
    ms.sort(inplace,0, inplace.length-1);
    ms.printArray(inplace,"Final result");
  }

  
  private void sort(int[] input, int lo, int hi){
    if(hi <= lo) return;
    int mid =  (hi+lo)/2;
    sort(input,lo,mid);
    sort(input,mid+1,hi);
    merge(input, lo,mid,hi);
  }
  
  private void merge(int[] input, int lo,  int mid, int hi){
    
    printArray(input,lo,hi,"input");
    int auxArrayLength = hi - lo+1;
    int[] auxArray = new int[auxArrayLength];
    int auxCounter  =0 ;
    for(int i = lo ; i <= hi ;i++)
      auxArray[auxCounter++] = input[i];
    printArray(auxArray,"Temp  Array");
    
    int auxArrayMid = (mid-lo) ;
    int firstArrayCounter  =0 ;
    int secondArrayCounter = auxArrayMid +1;
    for(int inputArrayCounter = lo ; inputArrayCounter <= hi; inputArrayCounter++ ){
      if(firstArrayCounter > auxArrayMid){ //First array is all coiped
        input[inputArrayCounter] = auxArray[secondArrayCounter++];
      }else if(secondArrayCounter >= auxArrayLength){ //Second array is all copied
        input[inputArrayCounter] = auxArray[firstArrayCounter++];
      }else if(auxArray[firstArrayCounter] < auxArray[secondArrayCounter]){ //Value at the top of first array is small
        input[inputArrayCounter] = auxArray[firstArrayCounter++];
      }else{
        input[inputArrayCounter] = auxArray[secondArrayCounter++];
      }
      printArray(input, "mergeTemp");
    }
    
    
    printArray(input,lo,hi,"output");
  }

  private void printArray(int[] input, String label) {

    System.out.print(label+ " ->{");
    for (int i = 0; i < input.length; i++) {
      System.out.print(input[i]);
      if (i != input.length - 1)
        System.out.print(" , ");
    }
    System.out.println("}");
  }
  
  private void printArray(int[] input,int lo, int hi, String label) {

    System.out.print(label+ " -> {");
    for (int i = lo; i <= hi; i++) {
      System.out.print(input[i]);
      if (i != input.length - 1)
        System.out.print(" , ");
    }
    System.out.println("}");
  }
}

No comments:

Post a Comment