java - Java 中的冒泡排序困惑

标签 java arrays algorithm arraylist bubble-sort

我有一个关于使用数组进行冒泡排序的问题。下面是一些示例代码:

public class SortArray 
{
    public static void main(String[] args)
    {
        int[] arr = {4,6,4,2,764,23,23};
        sort(arr);
    }
    static void sort(int[] arr)
    {
        int k;
        <b>for(int i = 0; i < arr.length; i++)
        {
            for(int j = i; j < arr.length-1; j++)
            {</b>
                if(arr[i] < arr[j+1])
                {
                    k = arr[j+1];
                    arr[j+1] = arr[i];
                    arr[i] = k;
                }
            }
            System.out.print(arr[i] + " ");
        }   
    }
}

检查数组有两个循环,我知道第一个循环是遍历数组中的每个元素,但是第二个呢?为什么 ji 开始,为什么它的长度会减去 1?

此外,我可以使用冒泡排序对 ArrayList 进行排序吗?

最佳答案

你所拥有的叫做selection sort , 不是 bubble sort .

冒泡排序只交换相邻元素,但您要遍历数组的其余部分并找到最小值,这正是选择排序所做的。

由于您使用 arr[j+1],您可以重写内部循环以使用 arr[j] 并将范围向上移动一位,如下所示:

for(int j = i + 1; j < arr.length; j++)
{
    if(arr[i] < arr[j])
    {
        k = arr[j];
        arr[j] = arr[i];
        arr[i] = k;
    }
}

现在更清楚了,您正在查看彼此剩余的元素以找到最小值。

是的,您可以修改任何适用于数组的排序以对 ArrayList 进行排序,只需使用 ArrayList.get 而不是数组访问和 ArrayList.set 而不是数组赋值,即:

for(int i = 0; i < arr.size(); i++)
{
    for(int j = i + 1; j < arr.size(); j++)
    {
        if(arr.get(i) < arr.get(j))
        {
            int k = arr.get(j);
            arr.set(j, arr.get(i));
            arr.set(i, k);
        }
    }
}

请注意,选择排序和冒泡排序都相当低效 (O(n^2)),there are more efficient sorting algorithms例如快速排序或合并排序(在 O(n log n) 中运行)。

关于java - Java 中的冒泡排序困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19465443/

相关文章:

php - PHP中的对象排序

arrays - 计算排序数组中键出现次数的有效方法

c++ - 使用 string erase() 和 string length() 从字符串中删除某些字符

algorithm - 确定缩放级别以在谷歌地图上显示多边形

java - 如何检测客户端机器是否已经安装了JRE版本?

java - 在spark中使用stanford nlp,错误 "Class java.util.function.Function not found - continuing with a stub."

c - 如何删除字符数组中的元素或创建没有特定元素的新数组的副本?

java - 如何连接两个表并将其用作jpa存储库

java - 获取网页访问者的 IP、ISP 和地理位置

java - BufferedImage.getRGB(int, int, int, int, int[], int, int) 如何工作?