【问题标题】:Is there a name for my sorting algorithm?我的排序算法有名称吗?
【发布时间】:2019-03-27 22:57:04
【问题描述】:

在学校作业中,我应该创建一个排序算法。

我做了以下事情:

    //array "ints" has already been declared
    int s = 0;
    for(int i=0;i<ints.length;i++) {
        for(int j=i+1; j<ints.length; j++) {
            if(ints[i]>ints[j]) {
                s = ints[j];
                ints[j]=ints[i];
                ints[i]=s;  
            }
        }
    }

老师把上面的算法叫做“冒泡排序”。然而,据我所知,(在谷歌上)上面的代码不是冒泡排序,冒泡排序看起来更像下面的代码:(可能不是最有效的)它的版本,但无论如何)

    //array "ints" has already been declared
    int sub = 0;
    int swaps = 100;
    if (ints.length>1) {
        while(swaps>0) {
            swaps=0;
            for(int i=0; i<ints.length-1; i++) {
                if(ints[i]>ints[i+1]) {
                    sub = ints[i+1];
                    ints[i+1]=ints[i];
                    ints[i]=sub;
                    swaps++;
                }
            }
        }
    }

我确定我实际上并没有发明一种新的排序算法,但我找不到任何排序算法使用与我编写的代码相同的过程。

我的算法有名字吗?

注意,它比较的是不相邻的值和排序过程,并且算法不一定在经过算法而不交换的情况下完成。这两者都表明它是不是冒泡排序。可能是版本选择排序。


我不想知道它的效率如何;我正在努力自己找出答案。

【问题讨论】:

  • 冒泡排序。
  • @PM77-1 哦。我的印象是冒泡排序只比较 adjacent 值,例如here
  • 有不止一种方法来实现冒泡排序。冒泡排序只是将低值冒泡到顶部。
  • 好的,我明白你的意思了,这不是传统的冒泡排序。你所实现的是我会说类似于对冒泡排序的轻微修改,称为选择排序,更多here。您遍历子数组以在选择排序中找到最小值。
  • 在我看来更像是选择排序,有很多多余的交换。

标签: java algorithm sorting


【解决方案1】:

这似乎是经过修改的 selection sort,正如 maraca 和 Srini 所指出的那样。

例如,请参阅this animation page。冒泡排序(具有给定的数组/列表长度)需要更长或更短的时间,具体取决于数组是否接近排序。选择排序(具有给定的数组/列表长度)花费完全相同的时间,无论列表最初是如何排序的。我的算法基本上类似于选择排序,只是它有很多额外/不必要的交换。

【讨论】:

  • 当我在学校学习这个习语时,教授称它为选择排序。两者都是非常糟糕的排序算法,但无论是更差的选择排序还是更差的冒泡排序,都有一个可靠的论据。
猜你喜欢
  • 1970-01-01
  • 2021-03-01
  • 2014-06-16
  • 2010-09-19
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多