Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用具有可比较数组列表的冒泡排序_Java_Arraylist_Comparable - Fatal编程技术网

Java 使用具有可比较数组列表的冒泡排序

Java 使用具有可比较数组列表的冒泡排序,java,arraylist,comparable,Java,Arraylist,Comparable,我正在编写一个程序,它使用可比较的ArrayList获取一个磁盘文件、手动输入的输入或随机生成的列表,并使用气泡排序方法对数组进行排序,同时计算交换并比较该方法所做的操作。目前我正在使用以下代码: public static void bubbleSort(ArrayList<Comparable> list) { int swaps = 0; int compares = 0; System.out.println("List

我正在编写一个程序,它使用可比较的ArrayList获取一个磁盘文件、手动输入的输入或随机生成的列表,并使用气泡排序方法对数组进行排序,同时计算交换并比较该方法所做的操作。目前我正在使用以下代码:

public static void bubbleSort(ArrayList<Comparable> list)
    {
        int swaps = 0;
        int compares = 0;
        System.out.println("List before sorting: " + list);
        for (int i = 0; i < list.size(); i++)
            for (int j = 0; j < list.size() - 1; j++)
            {
                if (list.get(j).compareTo(list.get(j + 1)) == 0)
                {
                    swaps++;
                    compares++;
                    Swap(list.get(j), list.get(j + 1));
                }
                else
                {
                    compares++;
                }
            }
        System.out.println("List after sorting: " + list);
        System.out.println("The system compared " + compares + " time(s).");
        System.out.println("The system swapped " + swaps + " time(s)");
    }
我不明白为什么/如何比较10100次,为什么不排序。如果您的
Swap(list.get(j),list.get(j+1))无法交换传递给它的两个元素。为了能够交换它们,您必须传递
列表
本身+要交换的元素的索引

或者干脆打电话

Collections.swap(list, j, j + 1)
此外,正如Robby所评论的,您只尝试交换相等的元素

if (list.get(j).compareTo(list.get(j + 1)) == 0)
应该是

if (list.get(j).compareTo(list.get(j + 1)) > 0)

只有在元素相等时才能交换。很可能您的交换逻辑本身也不正确。谢谢。成功了。然而,它仍然显示,它比10100倍。假设ArrayList有100个值。是吗?@nicholas你确定是100而不是101?
if (list.get(j).compareTo(list.get(j + 1)) > 0)