-1

我一直在使用递归进行选择排序和冒泡排序。我终于想出了两种方法,而且效果很好。但是当我最后看一下这些时,它们看起来只是一种方法,即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);
    }

}
4

2 回答 2

4

唯一不同的是

 if(list[i].compareTo(list[i + 1]) > 0){

 if(list[i+1].compareTo(list[i]) < 0)

并提供 compareTo 正确实现,这将做同样的事情。

顺便说一句,if(n > 1)检查是多余的。我会移动tmp到你能做到的最内部的范围。

两种都是冒泡排序。冒泡排序“冒泡”值到顶部/右侧位置。

选择排序重复选择最低/最高值,将所选值与放置它所需的位置交换。即交换将在循环之外找到最低/最高。

于 2013-11-03T20:46:20.213 回答
0

它都是冒泡排序,一个是从上到下冒泡元素,另一个是循环排序。选择排序不同:它搜索所有剩余(未排序)元素中的最小元素并将其放置在下一个槽中,它不会更改任何其他元素。相反,冒泡排序总是比较两个元素并交换它们是第一个大于(或小于)第二个 - 这就是你正在做的。

于 2013-11-03T20:53:41.630 回答