Java 使用合并排序对数组列表进行排序
我在将排序类转换为使用ArrayList排序对象时遇到问题。它目前正在对对象进行排序,但我无法将其转换为排序ArrayList。代码如下:Java 使用合并排序对数组列表进行排序,java,sorting,arraylist,Java,Sorting,Arraylist,我在将排序类转换为使用ArrayList排序对象时遇到问题。它目前正在对对象进行排序,但我无法将其转换为排序ArrayList。代码如下: package Merge_Sort_Objects_ArrayList; import java.util.ArrayList; public class mergesort { /** * Merges two sorted portion of items array * pre: items[start.mid] is
package Merge_Sort_Objects_ArrayList;
import java.util.ArrayList;
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(ArrayList <Comparable> items, int start, int mid, int end){
Comparable temp;
int pos1 = start;
int pos2 = mid + 1;
int spot = start;
ArrayList <Comparable> objectSort = items;
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
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(ArrayList <Comparable> 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);
}
}
}
package Merge\u Sort\u Objects\u ArrayList;
导入java.util.ArrayList;
公共类合并排序{
/**
*合并项目数组的两个排序部分
*前置:项目[start.mid]已排序。项目[mid+1.end]已排序。开始结束){
如果((位置1>中间)| |((位置2 0
*post:items[start..end]从低到高排序
*/
公共静态void合并排序(ArrayList项、int开始、int结束){
如果(开始<结束){
int mid=(开始+结束)/2;
合并排序(项目、开始、中间);
合并排序(项目,中间+1,结束);
合并(项目、开始、中间、结束);
}
}
}
现在我已经开始转换它,但我仍然停留在这一部分:
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
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];
}
while(!(pos1>mid&&pos2>end)){
如果((pos1>mid)| |((pos2使用以下事实
Foo[] array = ......;
Foo rhs = .....;
Foo lhs;
array[i] = rhs;
lhs = array[j];
类似于:
ArrayList<Foo> list = .....;
Foo rhs = ......;
Foo lhs;
list.set(i, rhs);
lhs = list.get(i);
ArrayList=。。。。。;
Foo rhs=。。。。。。;
Foo-lhs;
列表.集合(i,rhs);
lhs=list.get(i);
如果不是为了练习,您可以查看排序ArrayList的方法。澄清“卡住”是什么意思你遇到了什么麻烦?你尝试了什么?对我来说似乎很简单。我一直坚持的是将while语句转换成一个while语句,该语句使用一个数组列表,没有错误。我遇到的问题是我不确定如何开始转换它。哦,那么你有错误吗?错误是什么?那会是什么我的意思是你已经做了一些努力,对吧?那么你为什么不展示一下你在while循环中所做的尝试。这两件事显然都是相关的信息。很好,很抱歉。我收到的错误基本上是告诉我我需要一个数组,但是找到了java Compariable。不过,我正在尝试获得排序呃,从数组列表而不是数组中读取。这有什么意义吗?我在问如何做。我真的不知道如何做。我只是想问一些关于如何处理它的建议,因为我以前没有这样做过。啊,如果你以前根本没有使用过列表
,这里有一个教程可能会有所帮助:。第一步是学习列表和数组之间的区别。谢谢你,Quantum。在第一次阅读“foo”之类的词时遇到了一些麻烦,但在最后它是非常有意义的!谢谢!