java - Java 中使用 ArrayList 的基本冒泡排序

标签 java sorting arraylist

我正在实现一个比较器,但它不起作用,所以我想我应该编写一个基本的冒泡排序。

int[] numbers = { 5, 8, 14, 1, 5678 };
int tempVar;
for (int i = 0; i < numbers.length; i++)
{
   for(int j = 0; j < numbers.length; j++)
   {
            if(numbers[i] > numbers[j + 1])
            {
                   tempVar = numbers [j + 1];
                   numbers [j + 1]= numbers [i];
                   numbers [i] = tempVar;
            }
   }
}
for (int i = 0; i < numbers.length; i++)
{
     System.out.println(numbers[i].toString());
}

本教程完全正确吗? https://blog.udemy.com/bubble-sort-java/

我按照示例将其应用于数组列表中的姓氏,但结果有点古怪。

String a;
String b;
Person c;
Person d;

for (int i=0; i< list.size(); i++){

    for(int j=0; j< list.size()-1; j++){

         a = list.get(i).getLastName();
         b = list.get(j+1).getLastName();
         c = list.get(i);
         d = list.get(j+1);

         if ( a.compareTo(b) < 0 )  {

             Person temp = d;
             list.set(j+1, c);        
             list.set(i, temp); 
         }
     }
 }

我真的很想掌握一些方法(比如弄清楚为什么我的比较器不起作用),但现在我只想让冒泡排序正常工作。谢谢。

最佳答案

在冒泡排序中,您只需要比较相邻元素并交换它们(取决于条件)。

如果您按升序排列而不是比较相邻元素并交换 if(arr[j]>arr[j+1])。 这将在第一次迭代中将最大的元素移动到末尾。因​​此在外循环中有 n-1 次迭代来对数组进行排序,其中 n 是数组的长度。

先读这个 Bubble sort因为你提到的教程是完全错误的

更正代码

for (int i = 0; i < numbers.length-1; i++)
{
   for(int j = 0; j < numbers.length-i-1; j++)
   {
            if(numbers[j] > numbers[j + 1])
            {
                   tempVar = numbers [j + 1];
                   numbers [j + 1]= numbers [j];
                   numbers [j] = tempVar;
            }
   }
}

这是 working link

关于java - Java 中使用 ArrayList 的基本冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30951974/

相关文章:

r - 排序:连字符前加空格

java - ListView 和 ArrayList 的区别

java - 按条件从数组列表中选择 3 个元素

java - 如何将读取对象添加到 ArrayList 并打印出用户请求的信息

java - 注入(inject)的 EJB 引用在 ViewScoped JSF Bean 中丢失

java - 如何修复这些双牙套

java - 正则表达式获取空格或 ""之间的所有内容

java - 无法在 linkedin Rest API 中获取教育详细信息

javascript - 根据另一个整数数组对数组进行排序

python - 按成员变量正确排序列表