首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现气泡排序-两种不同的方式,还是我实现了完全不同的排序算法?

实现气泡排序-两种不同的方式,还是我实现了完全不同的排序算法?
EN

Stack Overflow用户
提问于 2018-04-18 22:09:21
回答 1查看 345关注 0票数 1

我在阅读排序算法,完成了选择和冒泡排序,并认为我应该尝试实现我understood.It给我的东西,同时理解我打算编写的选择排序(代码片段-1)根本没有实现选择排序的关键特性(这是查找未排序数组的最小值,并一次构建一个排序数组)。因此,我又写了一个用于选择排序(代码片段-3)。但现在,我对第一段很好奇。有人能告诉我是否是泡泡型的吗?

代码片段-1

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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<ni<n-1)如何不影响这些情况下的结果吗?我只将Snippe-2的条件更改为j<n-1,因为由于arrj+1项的原因,它给了我Arrayoutofbound错误。是的,我也在调试模式和动画中看到了整个过程,但仍然不完全清楚如何选择条件。我知道我漏掉了一些东西。

EN

回答 1

Stack Overflow用户

发布于 2018-04-20 18:53:20

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

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

代码语言:javascript
复制
for (int i = 0; i <= n-2; i++)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49909739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档