이제 Java로 프로그래밍 과정을 수강중인 고등학교 12 학년입니다. 이제 내일 시험을 치르며 공부하려고합니다. 이 테스트는 실용적인 테스트이며 원시 데이터 또는 객체를 가져 와서 삽입 정렬, 선택 정렬 및 병합 정렬을 사용하여 원시 데이터, 배열 또는 배열 목록으로 정렬해야합니다. 이제 원시 데이터를 강타했습니다. 객체를 배열과 배열 목록으로 정렬하는 데 정말로 힘든 시간을 보내고 있습니다. 배열 및 배열 목록에 대한 선택 정렬이 있으므로 병합 정렬 및 삽입 정렬과 관련된 문제가 있습니다. 나는 그걸하는 법을 모르겠습니다.삽입 정렬, 선택 정렬 및 병합 정렬로 정렬
미리 도움을 주셔서 감사합니다.
내가 원코드의 나의 첫번째 덩어리가 여기에 임의의 원을 얻는다라는 이름의 개체를 정렬이 두 클래스를 변환하는 방법을 알고 싶습니다, 문제를 단순화하고 정렬 내 다른 클래스로를 공급합니다. 마지막 코드 블록이 그것을 정렬합니다.
package Merge_Sort_Objects_Array;
import java.util.Scanner;
import java.lang.Math;
public class TestSorts {
public static void displayArray(int[] array){
for (int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
System.out.println("\n");
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numItems;
int[] test;
System.out.print("Enter number of elements: ");
numItems = input.nextInt();
/* populate array with random integers */
test = new int[numItems];
for (int i=0; i < test.length; i++){
test[i] = (int)(100 * Math.random());
}
System.out.println("Unsorted:");
displayArray(test);
mergesort.mergesort(test, 0, test.length - 1);
System.out.println("Sorted: ");
displayArray(test);
}
}
package Merge_Sort_Objects_Array;
public class mergesort {
/**
* Merges two sorted portion of items array
* pre: items[start.mid] is sorted. items[mid+1.end] sorted. start <= mid <= end
* post: items[start.end] is sorted
*/
private static void merge(int[] items, int start, int mid, int end){
int[] temp = new int[items.length];
int pos1 = start;
int pos2 = mid + 1;
int spot = start;
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2] < items[pos1]))){
temp[spot] = items[pos2];
pos2 +=1;
}else{
temp[spot] = items[pos1];
pos1 += 1;
}
spot += 1;
}
/* copy values from temp back to items */
for (int i = start; i <= end; i++){
items[i] = temp[i];
}
}
/**
* mergesort items[start..end]
* pre: start > 0, end > 0
* post: items[start..end] is sorted low to high
*/
public static void mergesort(int[] items, int start, int end){
if (start < end){
int mid = (start + end)/2;
mergesort(items, start, mid);
mergesort(items, mid + 1, end);
merge(items, start, mid, end);
}
}
}
더 좋습니까?
오케이 그렉, 여기는 업데이트 된 testSorts 클래스입니다. 이제는 int 대신 Circle으로 변경했습니다. 그러나 이전에 식별 한 오류가 계속 발생합니다.
public class TestSorts {
public static void displayArray(Circle[] array){
for (int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
System.out.println("\n");
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numItems;
Circle[] test;
System.out.print("Enter number of objects: ");
numItems = input.nextInt();
/* populate array with random integers */
test = new Circle[numItems];
for (int i=0; i < test.length; i++){
test[i] = new Circle((int)(10 * Math.random() + 1));
}
System.out.println("Unsorted:");
displayArray(test);
mergesort.mergesort(test, 0, test.length - 1);
System.out.println("Sorted: ");
displayArray(test);
}
}
그게 도움이 되나요?
무엇이 질문입니까? 문제가있는 코드를 보여줄 수 있습니까? –