#Merge sort problem.
1 messages · Page 1 of 1 (latest)
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++;
}
}```
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++;
}
}