我正在研究基于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
答案 0 :(得分:2)
通常重要的比较次数和通过次数较少但比较相同。此外,选择排序通常用于小集合中,因为它的简单,对于较大的集合,将使用具有较低时间复杂度的排序。
当您可以使用O(N log N)排序时,何时使用优化的O(N ^ 2)排序?只有当N很小时,你才想要一些简单的东西来掩盖它。例如当我想比较最多两个元素时,我使用选择排序。