在Selection Sort中查找每个遍中的数组中的最小值和最大值

时间:2017-01-08 09:50:29

标签: java sorting selection-sort

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

中的增强功能

Selection Sort的documented approach讨论了在每次传递中找到最大或最小的对象

  

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

我想知道它有可能找到最大的&通过检查两个条件

,一次通过最小的对象
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

1 个答案:

答案 0 :(得分:2)

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

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