gpt4 book ai didi

java - 使用插入排序、选择排序和归并排序进行排序

转载 作者:行者123 更新时间:2023-11-30 11:44:17 25 4
gpt4 key购买 nike

现在我在高中 12 年级,正在学习 Java 编程类(class)。现在我明天要考试,我正在努力学习。该测试是实际测试,我必须获取原始数据或对象,然后使用插入排序、选择排序和合并排序将它们排序为原始数据、数组或数组列表。现在我把它放在原始数据上。只是我很难将对象排序到数组和数组列表中。我对数组和数组列表进行了选择排序,所以它只是合并排序和插入排序,我遇到了很大的麻烦。我只是不知道该怎么做。

提前感谢您的帮助。

为了简化问题,我想知道如何将这两个类转换为对名为 Circle 的对象进行排序

我这里的第一段代码获取随机圆圈,然后将其送入我的其他类(class)进行排序。我的最后一个代码块对其进行了排序。

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);
}
}
}

这样更好吗?

好的 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);
}

}

这有帮助吗?

最佳答案

看起来您需要做两件基本的事情来修改现有的排序代码以处理 Circle对象。

  1. 更改类型 int输入 Circle在排序方法的数组类型中(只是数组类型,不是索引)。

  2. 做一些有意义的事情来代替 items[pos2] < items[pos1] (因为你不能只用 < 来比较对象)。也许对于圆你想按半径排序,所以你可以做 items[pos2].getRadius() < items[pos1].getRadius() .但这取决于你。

随着您了解更多关于 generic programming 的信息,您会发现更好的方法来执行此操作,以便您的现有代码可以应用于任何合适的对象类型,而无需在每次需要将其用于新类型时都进行修改。

关于java - 使用插入排序、选择排序和归并排序进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10826093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com