当前位置: 首页 > 面试题库 >

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

单嘉泽
2023-03-14
问题内容

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

我需要对它进行排序,以便可以使用我创建的一种方法,该方法基本上可以执行collections.swap的工作,以便对数组列表进行完全排序。

这是我的代码:

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指数开始。

您应该这样更新代码:

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))复杂度算法,等等。



 类似资料:
  • 我正在尝试对字符串进行大小写排序--不敏感地不导入任何东西。使用很容易做到这一点,但我想不出没有它的方法。我只把它分类到acdabcce...有什么想法吗?

  • 我正在编写一个java程序,其中我不想对数组列表元素使用任何循环。下面的Sure程序将在不使用任何循环的情况下将输出从0打印到n,因为ArrayList从AbstractCollection继承了一个带有循环的toString()方法。 现在,如果我使用这个程序,这将给我大约O(n*m)解,这是我不想要的。是否有任何方法可以访问数组列表中的所有元素而不使用任何循环?

  • 问题内容: 我正在尝试按升序对任意长度整数的数字进行排序,而不使用字符串,数组或递归。 例: 我已经弄清楚如何用模数除法获得整数的每个数字: 但是我不知道如何在没有数组的情况下排序数字。 不用担心上课;这是我们教授给我们的习俗课。 问题答案: 实际上有一个非常简单的算法,它 仅 使用 整数 : 它会打印出来。这个想法很简单: 您将要排序的数字作为当前数字(我们称其为N) 您可以浏览已排序数字中的所

  • 问题内容: 我在Java中有一个双打列表,我想按降序对ArrayList进行排序。 输入如下: 输出应该是这样的 问题答案: 那会做你想要的。请记住要导入!

  • 问题内容: 我有一堂水果课。我正在创建此类的列表,并将每个水果添加到列表中。我想根据水果名称的顺序对该列表进行排序。 我正在使用for循环创建它的列表 我需要使用列表中每个对象的水果名称对该arrayList进行排序 问题答案: 使用这样的: 现在,你的水果清单将基于进行排序。

  • 基本上可以通过以下方式进行排序: collections.sort(列表); 这里的问题是,一旦我添加了traders arraylist中的所有值,我需要排序并显示为输出。我尝试使用collections.sort(),但它显示编译器异常。