Tuesday, 25 August 2015

Java Practice 8

Write a program for merge sort?
  1. public class MergeSort {
  2. private int[] array;
  3. private int[] tempMergArr;
  4. private int length;
  5. public static void main(String a[]){
  6. int[] inputArr = {45,23,11,89,77,98,4,28,65,43};
  7. MergeSort mms = new MergeSort();
  8. mms.sort(inputArr);
  9. for(int i:inputArr){
  10. System.out.print(i);
  11. System.out.print(" ");
  12. }
  13. }
  14. public void sort(int inputArr[]) 
  15. {
  16. this.array = inputArr;
  17. this.length = inputArr.length;
  18. this.tempMergArr = new int[length];
  19. doMergeSort(0, length - 1);
  20. }
  21. private void doMergeSort(int lowerIndex, int higherIndex) {

  22. if (lowerIndex < higherIndex) {
  23. int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
  24. // Below step sorts the left side of the array
  25. doMergeSort(lowerIndex, middle);
  26. // Below step sorts the right side of the array
  27. doMergeSort(middle + 1, higherIndex);
  28. // Now merge both sides
  29. mergeParts(lowerIndex, middle, higherIndex);
  30. }
  31. }
  32. private void mergeParts(int lowerIndex, int middle, int higherIndex) 
  33. {
  34. for (int i = lowerIndex; i <= higherIndex; i++) {
  35. tempMergArr[i] = array[i];
  36. }
  37. int i = lowerIndex;
  38. int j = middle + 1;
  39. int k = lowerIndex;
  40. while (i <= middle && j <= higherIndex) {
  41. if (tempMergArr[i] <= tempMergArr[j]) {
  42. array[k] = tempMergArr[i];
  43. i++;
  44. } else {
  45. array[k] = tempMergArr[j];
  46. j++;
  47. }
  48. k++;
  49. }
  50. while (i <= middle) {
  51. array[k] = tempMergArr[i];
  52. k++;
  53. i++;
  54. }

  55. }
  56. }