java - 有效的选择排序算法?

标签 java sorting selection-sort

我编写了以下使用选择排序对数组进行排序的方法:

public T[] selection(T[] arr)
{
   T temp, min;
   for(int i = 0; i < arr.length-1; i++)
   {
      for(int j = i + 1; j < arr.length; j++)
      {
         min = arr[i];
         if(min.compareTo(arr[j]) > 0)
         {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
         }
      }
   return arr;
}

但是,我无法区分我的算法和冒泡排序。我的排序方法是否通过选择排序方法?

最佳答案

你的算法实际上是一种叫做交换排序的东西。

在选择排序中,您对数组进行遍历以找到最小的元素。每当发现一个元素小于迄今为止发现的最小元素时,您就记下它的位置,但不要移动或交换它。只有在扫描完数组元素后,您才会将找到的项目交换到数组中较早的位置。这意味着您始终最多进行总共 n - 1 次交换,外循环每次迭代一次。

这与您代码中的内容不符,因为您在外部 i 循环的每次迭代中执行多次交换。您拥有的算法称为交换排序。这是一种合法的排序算法,就像外部 i 循环每次迭代结束时的选择排序一样,您将正确放置另一个元素,但它的运行速度比真正的选择排序慢,因为您进行的交换比所需的要多得多.

关于java - 有效的选择排序算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70026152/

相关文章:

javascript - 使用函数按字母顺序对字符串进行排序

asp.net - GridView排序: SortDirection always Ascending

c++ - Advanced SelectionSort - 在一次迭代中搜索两个元素

javascript - 做,你所有的断言都通过了吗?这是错误

java - 使用正则表达式删除后跟 O 的单个字符

java - @Profile 注释中的 AND 运算符

java - Android 异步中的 NetworkOnMainThreadException

c# - 如何对合并的数据集进行排序和排序

java - 在 Java 中轻松交换 double/float

c - c中链表的选择排序