Java 使用合并排序对数组列表进行排序

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

我在将排序类转换为使用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 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”之类的词时遇到了一些麻烦,但在最后它是非常有意义的!谢谢!