在一次学校作业中,我应该创建一种排序算法。
我做了以下事情:
//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++;
}
}
}
}
我可以确定我实际上没有发明一种新的排序算法,但是找不到任何使用与我编写的代码相同的过程的排序算法。
我的算法有名字吗?
请注意,它会比较不相邻的值和排序过程,并且在经过一轮算法而不交换之前,算法不一定会完成。这两项都表明它是不是冒泡排序。可能是版本选择排序。
我不想知道它的效率如何;我正在努力自己找出答案。
答案 0 :(得分:2)
正如maraca和Srini所指出的,这似乎是经过修改的selection sort。
例如,参见this animation page。冒泡排序(具有给定的数组/列表长度)需要更长或更短的时间,具体取决于数组是否接近排序。无论列表最初是如何排序的,“选择排序”(具有给定的数组/列表长度)都会花费完全相同的时间。我的算法基本上类似于选择排序,除了它有很多额外/不必要的交换。