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