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