java - 为什么这个排序不起作用

标签 java sorting arraylist

好的,所以我编写了一个对 ArrayList 对象进行排序的方法。它确实...有点。该对象是一个由 20 个随机数组成的数组,执行下面所示的代码后,我得到以下结果:

[-7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 13, 13, 13, 13, 13, 13, 13 、27、27、27]

public static void sortArray (ArrayList<Integer> arrayToSort)
{
    int smallestNum;

    for (int j=0; j<arrayToSort.size(); j++)
    {
        smallestNum = arrayToSort.get(j);
        for (int i=j; i<arrayToSort.size(); i++)
        {
            if (arrayToSort.get(i)<=smallestNum)
            {
                smallestNum = arrayToSort.get(i);
            }
        }
        arrayToSort.set(j, smallestNum);
    }       
}

最佳答案

当你执行这一行时:

arrayToSort.set(j, smallestNum);

您正在吹走位置 j 中已经存在的所有内容并完全丢失它,这就是为什么您会看到 -7 重复,直到您到达原始数组中 -7 的位置。你想将最小的数字交换到第 j 个位置,并将第 j 个位置的数字与你抓取最小数字的位置交换。

你真正想要的是:

public static void sortArray (ArrayList<Integer> arrayToSort)
{
    int smallestNum;
    int smallestPos;

    for (int j=0; j<arrayToSort.size(); j++)
    {
        smallestNum = arrayToSort.get(j);
        smallestPos = j;
        for (int i=j; i<arrayToSort.size(); i++)
        {
            if (arrayToSort.get(i)<=smallestNum)
            {
                smallestNum = arrayToSort.get(i);
                smallestPos = i;
            }
        }
        arrayToSort.set(smallestPos, arrayToSort.get(j);
        arrayToSort.set(j, smallestNum);
    }       
}

关于java - 为什么这个排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760454/

相关文章:

java - 使用泛型构造子类的实例

php - 如何将两个 MySQL 列合并为一个列?

java - 我可以从用 Java 编写的 EBS 触发 AWS Lambda 函数吗?我可以向它传递参数吗?我还需要使用哪些其他服务才能使用 Lambda?

java - Radio Button setchecked在Android中不能设置为true

java - tomcat7 在 ubuntu 中用 spring 循环请求。怎么修?

c# - 在 C# 中对包含子项的列表进行排序

jquery - 寻找一个好的 jQuery 表,具有分页、多列排序和行选择功能

java - 如何从ArrayList中删除一个对象?

java - 如何在android studio中为另一个数组列表中的每个值创建一个数组列表

java - 多个线程访问一个 ArrayList