#Merge sort problem.

1 messages · Page 1 of 1 (latest)

torpid rampartBOT
#

<@&987246717831381062> please have a look, thanks.

gleaming cargo
#
        int[] ascii = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ascii[i] = (int) arr[i];
        }

        int jump = 1;
        for (int left = 0; left < arr.length; left += 2 * jump) {
            int mid = (jump + left);
            int right = Math.min(left + jump * 2, arr.length);
            merge(ascii, left, mid, right);
        }
        return ascii;
    }

    void merge(int[] arr, int left, int mid, int right) {
        int split1 = mid - left + 1;
        int split2 = right - mid;

        int[] leftArr = new int[split1];
        int[] rightArr = new int[split2];

        for (int i = 0; i < split1; i++) {
            leftArr[i] = arr[left + i];
        }
        for (int i = 0; i < split2; i++) {
            rightArr[i] = arr[mid + 1 + i];
        }


        int i = 0;
        int j = 0;
        int n = left;
        while (i < split1 && j < split2) {
            if (leftArr[i] <= rightArr[j]) {
                arr[n] = leftArr[i];
                i++;
            } else {
                arr[n] = rightArr[j];
                j++;
            }
            n++;
        }


        while (i < split1) {
            arr[n] = leftArr[i];
            i++;
            n++;
        }
        while (j < split2) {
            arr[n] = rightArr[j];
            j++;
            n++;
        }

    }```
torpid rampartBOT
# gleaming cargo ```int[] mergeSort(char[] arr) { int[] ascii = new int[arr.length]; ...

Detected code, here are some useful tools:

Formatted code
int [] mergeSort(char [] arr) {
  int [] ascii = new int [arr.length] ;
  for (int i = 0; i < arr.length; i++) {
    ascii[i]  = (int ) arr[i] ;
  }
  int jump = 1;
  for (int left = 0; left < arr.length; left += 2 * jump) {
    int mid = (jump + left);
    int right = Math.min(left + jump * 2, arr.length);
    merge(ascii, left, mid, right);
  }
  return ascii;
}
void merge(int [] arr, int left, int mid, int right) {
  int split1 = mid - left + 1;
  int split2 = right - mid;
  int [] leftArr = new int [split1] ;
  int [] rightArr = new int [split2] ;
  for (int i = 0; i < split1; i++) {
    leftArr[i]  = arr[left + i] ;
  }
  for (int i = 0; i < split2; i++) {
    rightArr[i]  = arr[mid + 1 + i] ;
  }
  int i = 0;
  int j = 0;
  int n = left;
  while (i < split1 && j < split2) {
    if (leftArr[i]  <= rightArr[j] ) {
      arr[n]  = leftArr[i] ;
      i++;
    }
    else {
      arr[n]  = rightArr[j] ;
      j++;
    }
    n++;
  }
  while (i < split1) {
    arr[n]  = leftArr[i] ;
    i++;
    n++;
  }
  while (j < split2) {
    arr[n]  = rightArr[j] ;
    j++;
    n++;
  }
}