我的排序算法有名字吗?

时间:2019-03-27 22:57:04

标签: java algorithm sorting

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

我做了以下事情:

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

老师称上述算法为“冒泡排序”。但是,据我所知,(在Google上)上面的代码不是 冒泡排序,而 bubble排序看起来更像下面的代码:(可能不是最有效的版本,但无论如何)

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

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

我的算法有名字吗?

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


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

1 个答案:

答案 0 :(得分:2)

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

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