以下两种递归排序方法是否相同?

时间:2013-11-03 20:42:28

标签: java sorting recursion

我一直在使用递归进行选择排序和冒泡排序。我终于提出了两种方法,它们完美地完成了。但是当我最后看一下这些时,它们看起来只是一个方法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);
    }

}

2 个答案:

答案 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)

它既是气泡排序,又是从顶部到底部的元素,另一个是圆形的。选择排序是不同的:它搜索所有剩余(未排序)元素的最小元素并将其放在下一个插槽中,它不会更改任何其他元素。相反,冒泡排序总是比较两个元素并交换它们是第一个比第二个更大(或更小)的元素 - 这就是你正在做的事情。