From b8da0cb3b14e145ee3ea5718005e30863afd069a Mon Sep 17 00:00:00 2001 From: Kruti Shah Date: Sun, 9 Feb 2025 11:41:35 +0530 Subject: [PATCH] merge sot modifications --- .../hithomelabs/princeton1/module6/Merge.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java index b9b7002..c4c5879 100644 --- a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java +++ b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java @@ -11,28 +11,33 @@ public class Merge extends AbstractCustomSorts { } private void merge_sort(E[] arr, int low_index, int high_index){ - System.out.println(low_index + " " + high_index); if(high_index - low_index > 0) { int mid_index = low_index + (high_index - low_index)/2; merge_sort(arr, low_index, mid_index); merge_sort(arr, mid_index + 1, high_index); // Copy array - E[] auxArr = (E[]) new Object[arr.length]; - System.arraycopy(arr, 0, auxArr, 0, arr.length); + E[] auxArr = (E[]) new Object[high_index - low_index + 1]; + int index = 0; + for(int i=low_index; i<= high_index; i++) + auxArr[index++] = arr[i]; // Sort - int low_index_ptr = low_index; - int high_index_ptr = mid_index + 1; - for(int i=low_index; i<= high_index; i++){ - if(low_index_ptr > mid_index) - arr[i] = auxArr[high_index_ptr++]; - else if(high_index_ptr > high_index) - arr[i] = auxArr[low_index_ptr++]; - else if(less((Comparable) auxArr[low_index_ptr], auxArr[high_index_ptr])) - arr[i] = auxArr[low_index_ptr++]; - else - arr[i] = auxArr[high_index_ptr++]; + int low_index_ptr = 0; + int mid_index_ptr = (auxArr.length - 1)/2; + int high_index_ptr = mid_index_ptr + 1; + if(!less((Comparable) auxArr[mid_index_ptr], auxArr[high_index_ptr])) { + for (int i = low_index; i <= high_index; i++) { + if (low_index_ptr > mid_index_ptr) { + arr[i] = auxArr[high_index_ptr]; + high_index_ptr++; + } else if (high_index_ptr >= auxArr.length) + arr[i] = auxArr[low_index_ptr++]; + else if (less((Comparable) auxArr[low_index_ptr], auxArr[high_index_ptr])) + arr[i] = auxArr[low_index_ptr++]; + else + arr[i] = auxArr[high_index_ptr++]; + } } } }