【问题标题】:Finding both the minimum and maximum in a array with each pass in Selection Sort每次在选择排序中查找数组中的最小值和最大值
【发布时间】:2017-01-08 18:23:09
【问题描述】:

我正在研究基于 Java 的数组排序技术,偶然发现了 Selection Sort 中的增强功能

Selection Sort 的documented approach 谈到在每次遍历中找到最大或最小的对象

算法通过找到最小的(或最大的,取决于 按排序顺序)未排序子列表中的元素,交换 (交换)它与最左边的未排序元素(将其放入已排序 order),并将子列表边界向右移动一个元素。

我想知道通过检查两个条件是否可以在一次通过中找到最大和最小的对象

public static void mySort(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length - i; j++) {
            //This will make sure smallest element will come first
            if (arr[i] > arr[j]) {
                swap(arr, i, j);
            }
            // This will make sure largest element will come last
            if (arr[j] > arr[arr.length - 1 - i]) {
                swap(arr, arr.length - 1 - i, j);
             // This will ensure that if a smaller element existed at the ending position and got swapped , we are making sure that it doesn't get mixed
                if (arr[i] > arr[j]) {
                    swap(arr, i, j);
                }
            }
        }
    }
}

基本上我们在这里所做的是从两端进行排序。 与传统的选择排序相比,这将节省一些时间,您能否提供有关该方法的反馈以及是否已经存在类似的东西

更多详情@my blog post

【问题讨论】:

  • this paper
  • 通常比较重要的是比较次数,通过次数较少,但比较是相同的。此外,选择排序通常用于小集合,因为它简单,对于较大的集合,将使用具有较低时间复杂度的排序。
  • 谢谢@BoristheSpider .. 我猜你指出的那篇论文讲得差不多
  • @BoristheSpider 读起来不是很愉快...
  • @shmosel 是的,英语很精彩;但它确实为大致相同的代码提供了一些实验结果。该期刊是“有问题的”,但我认为一个体面的期刊不会打扰发布“改进的选择排序”的结果 - 因为Peter points out 有很多已知算法具有O(n lg n) 复杂性。

标签: java sorting selection-sort


【解决方案1】:

通常比较重要的是比较次数,通过次数较少,但比较是相同的。此外,选择排序通常用于小集合,因为它简单,对于较大的集合,将使用具有较低时间复杂度的排序。

当您可以使用 O(N log N) 排序时,您何时会使用优化的 O(N^2) 排序?只有当 N 很小时,你想要一些简单的东西来覆盖它。例如当我想比较最多两个元素时,我使用选择排序。

【讨论】:

  • 这个。 O((n^2) / 2) === O(n^2),降低复杂性的唯一方法是将工作减少为项目数量的函数
  • 谢谢@peterLawrey ... yupp .. 比较仍然相同,但复杂度仍在 O(n2) 范围内 ..
猜你喜欢
  • 2013-11-12
  • 2020-05-25
  • 2018-05-03
  • 1970-01-01
  • 2017-08-18
  • 2021-09-15
  • 2018-08-01
  • 2019-03-31
相关资源
最近更新 更多