我一直在使用递归进行选择排序和冒泡排序。我终于提出了两种方法,它们完美地完成了。但是当我最后看一下这些时,它们看起来只是一个方法selectionSortRecursive
。你能告诉我区别(或者它们是否相同)?
public static void selectionSortRecursive(Comparable[] list, int n)
{
Comparable temp;
if ( n > 1 ){
for ( int i = 0; i < n - 1; i++ )
{
if(list[i].compareTo(list[i + 1]) > 0){
temp = list[i];
list[i] = list[i + 1];
list[i + 1] = temp;
}
}
selectionSortRecursive(list, n - 1);
}
}
public static void bubbleSortRecursive( Comparable[] list, int n)
{
Comparable tmp;
if (n >1) {
for (int i = 0; i < n - 1; i++)
{
if(list[i+1].compareTo(list[i]) < 0)
{
tmp = list[i];
list[i] = list[i+1];
list[i+1] = tmp;
}
}
bubbleSortRecursive( list, n - 1);
}
}
答案 0 :(得分:4)
唯一不同的是
if(list[i].compareTo(list[i + 1]) > 0){
和
if(list[i+1].compareTo(list[i]) < 0)
并提供了compareTo正确实现,这将做同样的事情。
BTW if(n > 1)
检查是多余的。我会将tmp
移到最内在的范围内。
这两种都是泡沫种类。冒泡将“气泡”值排列到顶部/右侧位置。
选择排序重复选择最低/最高值,将所选位置与所需位置交换。即交换将在循环之外找到最低/最高。
答案 1 :(得分:0)
它既是气泡排序,又是从顶部到底部的元素,另一个是圆形的。选择排序是不同的:它搜索所有剩余(未排序)元素的最小元素并将其放在下一个插槽中,它不会更改任何其他元素。相反,冒泡排序总是比较两个元素并交换它们是第一个比第二个更大(或更小)的元素 - 这就是你正在做的事情。