这两种气泡排序算法有什么区别?

时间:2019-06-13 11:23:24

标签: java algorithm sorting

我正在研究算法。而且我在网上搜索了冒泡排序算法,我发现的大多数实现似乎比我自己编写的代码过于复杂。两种算法都起作用。

我的是bubbleSort1,而我在大多数来源中发现的是bubbleSort2。

我在if块中添加了一个计数器。而且似乎第二种算法比第一种具有更多的操作。

static void bubbleSort1(int[] arr) {
    int count = 0;
    int temp;
    for (int i = 0; i < arr.length - 1; i++) {

        for (int j = i + 1; j < arr.length; j++) {

            if (arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                count++;
            }
        }
    }
    System.out.println(count);

}

static void bubbleSort2(int[] arr) {
    int n = arr.length;
    int temp = 0;
    int count = 0;

    for (int i = 0; i < n; i++) {
        for (int j = 1; j < (n - i); j++) {

            if (arr[j - 1] > arr[j]) {

                temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
                count++;
            }
        }
    }
    System.out.println(count);
}

对于以下int数组:{0,0,-10,4,100,2,5,5,45,1,-400,3,5,6}

bubbleSort1计数:26

bubbleSort2计数:28

所以显然有区别。

1 个答案:

答案 0 :(得分:2)

首先,您的函数( bubbleSort1 )不是冒泡排序。在冒泡排序中,相邻元素彼此之间交换

第二,在 bubbleSort2 函数中,将最大的元素首先放置在末尾,然后将第二个最大的元素放置在 end-1 处,依此类推。但是在 bubbleSort1 中,最小元素首先在 0 位置移动,然后是第二个最小元素在 1 < / em> ,依此类推。

但是它们两个都是 O(Nˆ2) 时间复杂度。