다른 위치에 게시되어 있으면 문제가 발생하기 때문에 아무 것도 찾을 수 없지만 죄송합니다. 오류는 무엇인지 (또는 이론상으로는) 이해합니다. 문제를 해결하는 방법에 문제가 있습니다. 이 코드는 병합 정렬이 작동하는 방식을 보여줍니다. 코드는 실행되지만 결코 "merge"라는 함수 호출에 도달하지 않습니다 (아래 코드, 수입에서 모두 호출하는 것이 좋지 않지만 주요 프로젝트는 아니므로 상관 없습니다). 그냥 미리보기지만 import java.util. 및 가져 오기 java.security.;)로 작성됩니다.누락 된 함수 호출에서 스택 오버플로
import java.util.*;
import java.security.*;
public class Merge {
public static void mergeSort(int[] data) {
sortArray(data, 0, data.length - 1);
}
private static void sortArray(int[] data, int low, int high) {
if ((high - low) >= 1) {
int m1 = low + high;
int m2 = m1 + 1;
System.out.printf("Split: %s\n", subarrayString(data, low, high));
System.out.printf(" %s\n", subarrayString(data, low, m1));
System.out.printf(" %s\n\n", subarrayString(data, m2, high));
sortArray(data, low, m1);
sortArray(data, m2, high);
merge(data, low, m1, m2, high);
}
}
public static void merge(int[] data, int l, int m1, int m2, int r) {
int lIndex = l, rIndex = r, cIndex = l, combined[] = new int[data.length];
System.out.printf("Merge: %s\n", subarrayString(data, l, m1));
System.out.printf(" %s\n", subarrayString(data, m1, r));
while (lIndex <= data[rIndex]) {
if (data[lIndex] <= data[rIndex])
combined[cIndex++] = data[lIndex++];
else
combined[cIndex++] = data[rIndex++];
}
if (lIndex == m2)
while (rIndex <= r) combined[cIndex++] = data[rIndex++];
else
while (lIndex <= m1) combined[cIndex++] = data[rIndex++];
}
private static String subarrayString(int[] data, int low, int high) {
StringBuilder temp = new StringBuilder();
for (int i = 0; i < low; i++)
temp.append(" ");
for (int i = 0; i < high; i++)
temp.append(" " + data[i]);
return temp.toString();
}
public static void main2() {
SecureRandom gen = new SecureRandom();
int[] data = new int[10];
for (int i = 0; i < data.length; i++) data[i] = 10 + gen.nextInt(50);
System.out.printf("\nUnsorted Array:\n%s\n\n", Arrays.toString(data));
mergeSort(data);
System.out.printf("\nSorted Array:\n%s\n\n", Arrays.toString(data));
}
}
드라이버 파일이 필요한 경우 알려주십시오. 다시 말하면 문제는 병합 함수 호출에 도달하지 못하고 스택 오버플로 오류가 발생한다는 것입니다.
내가이 솔루션을 시도하고, 당신이 나를 위해 당신의 대답을 정교하게 수 있을까? 나는 여전히 동일한 오류가 발생하고 아무것도 변경하지 않은 것 같습니다 ... – Astix
코드에 버그가 있습니다. 하나는 버그 위에 있습니다. 또한 오른쪽 인덱스의 데이터로 lIndex를 검사 할 때 아래 while 루프에 문제가 있습니다. –