Java 使用插入排序、选择排序和合并排序进行排序
现在我在高中12年级学习Java编程课程。现在我明天有考试,我正在努力学习。该测试是一个实际的测试,我必须获取基本数据或对象,并使用插入排序、选择排序和合并排序将它们排序到基本数据、数组或数组列表中。现在我把它放在原始数据上。只是我很难将对象排序到数组和数组列表中。我有数组和数组列表的选择排序,所以这只是合并排序和插入排序,我有很大的麻烦。我就是不知道怎么做 提前谢谢你的帮助 为了简化问题,我想知道如何将这两个类转换为对名为Circle的对象进行排序 我在这里的第一段代码得到随机圆圈,然后将其输入到我的另一个类中进行排序。我的最后一个代码块对其进行排序Java 使用插入排序、选择排序和合并排序进行排序,java,arrays,sorting,arraylist,Java,Arrays,Sorting,Arraylist,现在我在高中12年级学习Java编程课程。现在我明天有考试,我正在努力学习。该测试是一个实际的测试,我必须获取基本数据或对象,并使用插入排序、选择排序和合并排序将它们排序到基本数据、数组或数组列表中。现在我把它放在原始数据上。只是我很难将对象排序到数组和数组列表中。我有数组和数组列表的选择排序,所以这只是合并排序和插入排序,我有很大的麻烦。我就是不知道怎么做 提前谢谢你的帮助 为了简化问题,我想知道如何将这两个类转换为对名为Circle的对象进行排序 我在这里的第一段代码得到随机圆圈,然后将其输
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);
}
}
}
包合并\排序\对象\数组;
导入java.util.Scanner;
导入java.lang.Math;
公共类测试排序{
公共静态void displayArray(int[]数组){
for(int i=0;i中间)| |((位置2 0
*post:items[start..end]从低到高排序
*/
公共静态void合并排序(int[]项,int开始,int结束){
如果(开始<结束){
int mid=(开始+结束)/2;
合并排序(项目、开始、中间);
合并排序(项目,中间+1,结束);
合并(项目、开始、中间、结束);
}
}
}
这样更好吗
好的,Greg,这是更新后的testSorts类。现在我把它们都改为Circle而不是int,但是我仍然在前面识别的地方得到了这个错误
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);
}
}
公共类TestSorts{
公共静态void displayArray(圆圈[]数组){
for(int i=0;i
这有帮助吗?要修改现有的排序代码以处理
循环对象,似乎需要做两件基本的事情
在排序方法的数组类型中将类型int
更改为类型Circle
(仅数组类型,而不是索引)
做一些有意义的事情来代替items[pos2]
(因为你不能仅仅用来比较对象,你的问题是什么?你能展示一些你有困难的代码吗?谢谢你,格雷格,你让我有了90%的方法,谢谢你。我从来没有想过.getRadius()这个建议真的很有帮助。我遇到的另一个问题是testSorts底部附近的一行“mergesort.mergesort(test,0,test.length-1);”现在,第一个测试给了我一个错误,说它需要一个int。你知道怎么解决这个问题吗?@Spartan:你还需要修改TestSorts
中的代码,以创建一个Circle
对象数组,而不是int
。是的,我这样做了,但它仍然会给我错误。我会将顶部的代码更新为d我展示了我所拥有的。但这就是为什么它让我困惑的原因,我做了所有这些,但我仍然有那个该死的错误。没关系,我发现了错误。这是你会忽略的错误之一。非常感谢你,Greg!你帮了我很多忙,我终于明白了如何将排序类从原语转换为对象。