| 1 | public class MergeSort { |
| 2 | //sorting method (to do step1(divide) & step2(sort parts)) |
| 3 | public static void mergeSort(int arr[], int si, int ei) { |
| 4 | if(si >= ei) { |
| 5 | return; |
| 6 | } |
| 7 | int mid = si + (ei - si)/2; // or = (si + ei) / 2; |
| 8 | mergeSort(arr, si, mid); |
| 9 | mergeSort(arr, mid+1, ei); |
| 10 | |
| 11 | merge(arr, si, mid, ei); |
| 12 | } |
| 13 | |
| 14 | //merge method to merge the sorted parts |
| 15 | public static void merge(int arr[], int si, int mid, int ei) { |
| 16 | int temp[] = new int[ei-si+1]; |
| 17 | int i = si; //idx for 1st sorted part |
| 18 | int j = mid+1; //idx for 2nd sorted part |
| 19 | int k = 0; //idx for temp; |
| 20 | |
| 21 | while(i <= mid && j <= ei) { |
| 22 | if(arr[i] < arr[j]) { |
| 23 | temp[k] = arr[i]; |
| 24 | i++; |
| 25 | } else { |
| 26 | temp[k] = arr[j]; |
| 27 | j++; |
| 28 | } |
| 29 | k++; |
| 30 | } |
| 31 | |
| 32 | //for leftover elements of 1st sorted part |
| 33 | while(i <= mid) { |
| 34 | temp[k++] = arr[i++]; |
| 35 | } |
| 36 | |
| 37 | //for leftover elements of 2nd sorted part |
| 38 | while(j <= ei) { |
| 39 | temp[k++] = arr[j++]; |
| 40 | } |
| 41 | |
| 42 | //copy temp to original array |
| 43 | for(k=0, i=si; k<temp.length; k++, i++) { |
| 44 | arr[i] = temp[k]; |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | public static void printArr(int arr[]) { |
| 49 | for(int i=0; i<arr.length; i++) { |
| 50 | System.out.print(arr[i] +" "); |
| 51 | } |
| 52 | System.out.println(); |
| 53 | } |
| 54 | public static void main(String args[]) { |
| 55 | int arr[] = {6, 3, 9, 5, 2, 8}; |
| 56 | mergeSort(arr, 0, arr.length-1); |
| 57 | printArr(arr); |
| 58 | } |
| 59 | } |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…