如何在不使用collections.sort()的情况下对arraylist进行排序?

时间:2014-05-07 22:40:28

标签: java sorting collections arraylist

我一直在寻找一种方法来对一个arraylist进行排序而不使用collections.sort,因为我自己的逻辑有缺陷而且我遇到了很多麻烦。

我需要以一种方式对其进行排序,我可以使用我创建的方法,它基本上执行collections.swap所做的操作,以便完全对arraylist进行排序。

这是我的代码:

public static void mySort(ArrayList<Double> sort){

    int min = 0;
    int i;
    int j = 0;
        for(i = 0; i < sort.size() - 1; i++) {
            min = i;
            mySwap(sort, j ,min);

            for(j = 0; j < sort.size() -1;j++){
                if(j < min ){
                    min = j;
                }
            }
    }
}

public static void mySwap(ArrayList<Double> a, int x, int y){

    double temp = a.get(x);
    a.set(x,a.get(y));
    a.set(y,temp);
}

我一直遇到很多麻烦。对不起,如果这是一个伤害社区的问题。

1 个答案:

答案 0 :(得分:0)

我假设您需要以下算法:在数组的其余部分中找到min,将其与当前元素交换,从第一个开始,重新考虑 rest 以增加+1索引的数组开始。

您应该像这样更新您的代码:

public static void swap(List<Integer> sort, int i, int j) {
    int tmp = sort.get(i);
    sort.set(i, sort.get(j));
    sort.set(j, tmp);
}

public static void doSort(List<Integer> sort) {
    int min;
    for (int i = 0; i < sort.size(); ++i) {
        //find minimum in the rest of array
        min = i;
        for (int j = i + 1; j < sort.size(); ++j) {
            if (sort.get(j) < sort.get(min)) {
                min = j;
            }
        }

        //do swap
        swap(sort, i, min);
    }
}

您在查找最小项目然后交换项目时遇到错误。请注意,代码可以通过多种方式进行改进(我试图尽可能地保持你的编码方式),例如在swap()中交换整数引用,像另一个答案所示做BubbleSort(同样的)算法,但更简单的实现),使用O(n * log(n))复杂度算法,等等。