实现冒泡排序 - 两种不同的方式还是我实现了不同的排序算法?

时间:2018-04-18 22:09:21

标签: java arrays sorting bubble-sort

我正在读取排序算法,我完成了选择和冒泡排序,并认为我应该尝试实现我理解的东西。我花了一些时间来理解我写的意图是选择排序(代码片段-1)wasn' t实现选择排序的关键特性(即找到未排序数组的min并一次构建排序数组一个元素)。所以我又为选择排序编写了一个(代码片段-3)。但现在,我对Snippet-1感到好奇。有人可以告诉我它是否冒泡?

Code Snippet-1

adjusted

代码段2

public void sort(int[] arr) {
    // code snippet-1
    int n = arr.length;
    for (int i = 0; i < n; i++) {
        for(int j = i + 1; j < n; j++) {
            if(arr[i] > arr[j]){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

代码段-3

public void sort(int[] arr) {
    // code snippet-2
    int n = arr.length;
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-1; j++) {
            if(arr[j] > arr[j+1]){
                int temp=arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

此外,在一个不太相关的帐户中,有人可以解释外部for循环条件(即public void sort(int[] arr) { // Code snippet-3 int n = arr.length; for (int i = 0; i < n; i++) { int min = i; for(int j = i + 1; j < n; j++){ if(arr[j] < arr[min]) { min = j; } } int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } i<n)在这些情况下不会影响结果吗?我只将片段2的条件更改为i<n-1,因为它给了j<n-1错误,因为arr [j + 1]一词。是的,我在调试模式和动画中看到了整个事情,但仍然不完全清楚如何选择条件。我知道我在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:1)

您有不同的冒泡排序方法,而Arrayoutofbound异常是因为数组中没有的n + 1元素的比较。

在代码片段2中,您还可以通过执行以下操作来避免再循环:

for (int i = 0; i <= n-2; i++)