【问题标题】:Implementing Bubble sort-two different ways or am I implementing different sorting algorithm altogether?实现冒泡排序——两种不同的方式,还是我完全实现不同的排序算法?
【发布时间】:2018-04-18 22:09:21
【问题描述】:

我正在阅读排序算法,我完成了选择和冒泡排序,并认为我应该尝试实现我所理解的。我花了一段时间才理解我写的打算成为选择排序的内容(代码 sn-p-1)根本没有实现选择排序的关键特性(这是找到未排序数组的最小值并一次构建排序数组一个元素)。所以我又写了一个用于选择排序(代码 sn-p-3)。但现在,我对 Snippet-1 很好奇。谁能告诉我是不是冒泡排序?

代码片段 1

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;
            }
        }
    }
}

代码片段 2

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;
            }
        }
    }
}

代码片段3

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;
    }
}

另外,在一个不太相关的帐户上,有人可以解释外部 for 循环条件(即i&lt;ni&lt;n-1)在这些情况下如何不影响结果?我只将 sn-p-2 的条件更改为 j&lt;n-1,因为它给了我 Arrayoutofbound 错误,因为 arr[j+1] 术语。是的,我也看到了调试模式和动画的整个过程,但仍然不完全清楚如何选择条件。我知道我在这里遗漏了一些东西。

【问题讨论】:

  • 因为它是“不相关的”,所以当您执行arr[j] &gt; arr[j+1] 时,您将超过当前的j。如果您一直走到最后,您的代码将在最后一个元素上抛出该异常。\

标签: java arrays sorting bubble-sort


【解决方案1】:

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

在代码 sn-p 2 中,您还可以通过以下方式避免多循环:

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

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2012-07-23
    • 2013-02-02
    • 2012-06-14
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多