2013-11-03 21 views
-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); 
    } 

} 
+3

你为什么不直接写一个主测试并尝试一下呢? – ssantos

+0

我测试了它们。他们都完美地工作。但是现在我不知道他们是不是两种不同的算法? – user2774903

+0

我的问题是他们是两种不同的算法,它们是选择和冒泡排序?或者他们只是一个算法? – user2774903

回答

4

这是唯一不同的线路

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

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

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

顺便说一句if(n > 1)检查是多余的。我会将tmp移到最内层的范围。

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

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

0

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