ArrayList를 사용하는 병합 정렬 프로그램의 알고리즘이 작동하지 않는 이유를 알 수 없습니다 ... 녀석과 할아버지가 내게 도움이된다고 생각하면 도움이 될 것입니다! 인쇄에 필요한 형식은 20 개의 숫자마다 새 줄에 번호와 위치를 탭으로 표시해야합니다. 내 프로그램도 표준 Java 패키지로 제한되어 있습니다. 샘플 입출력은 here입니다. 내 코드는 다음과 같습니다.Java 병합 정렬 알고리즘 오류 - 정렬하지 않음
import java.io.*;
import java.util.*;
public class MergeSort {
public static void main(String[] args) throws IOException{
Scanner in = new Scanner(System.in);
Random r = new Random();
int size, largestInt, holder;
System.out.println("How many integers would you like me to create?");
size = in.nextInt();
ArrayList<Integer>list = new ArrayList<Integer>(size);
System.out.println("What would the largest integer be?");
largestInt = in.nextInt();
for(int i = 0; i < size; i++){
holder = r.nextInt(largestInt + 1);
list.add(holder);
}
mergeSort(list);
for (int j = 0; j < list.size(); j++) {
if(j == 19 || j == 39 || j == 59 || j == 79 || j == 99 || j == 119 || j == 139 || j == 159 || j == 179 || j == 199){
System.out.print(list.get(j));
System.out.println();
}
else{
System.out.print(list.get(j) + "\t");
}
}
}
static void mergeSort(ArrayList<Integer> list) {
if (list.size() > 1) {
int q = list.size()/2;
ArrayList<Integer> leftList = new ArrayList<Integer>();
for(int i = 0; i >0 && i <= q; i++){
leftList.add(list.get(i));
}
ArrayList<Integer> rightList = new ArrayList<Integer>();
for(int j = 0; j > q && j < list.size(); j++){
rightList.add(list.get(j));
}
mergeSort(leftList);
mergeSort(rightList);
merge(list,leftList,rightList);
}
}
static void merge(ArrayList<Integer> a, ArrayList<Integer> l, ArrayList<Integer> r) {
int totElem = l.size() + r.size();
int i,li,ri;
i = li = ri = 0;
while (i < totElem) {
if ((li < l.size()) && (ri<r.size())) {
if (l.get(li) < r.get(ri)) {
a.set(i, l.get(li));
i++;
li++;
}
else {
a.set(i, r.get(ri));
i++;
ri++;
}
}
else {
if (li >= l.size()) {
while (ri < r.size()) {
a.set(i, r.get(ri));
i++;
ri++;
}
}
if (ri >= r.size()) {
while (li < l.size()) {
a.set(i, l.get(li));
li++;
i++;
}
}
}
}
}
미리 감사드립니다.
어떤 방식으로 고장 났습니까? 몇 가지 예제 출력을 보여줍니다. – chm
@ chm052 가장 낮은 값에서 최대 값까지 순서대로 출력해야하며 병합 정렬 알고리즘 (예 : 1,2,3,4,6,19,67,89)을 사용하여 정렬해야합니다. –
현재 인쇄되는 것은 무엇입니까? ? * 해당 입력과 함께 몇 가지 예제 출력 *을 보여줍니다. – chm