在Java中排序更好的选择排序
首先,你能告诉我哪段代码是更好的选择排序吗?那么如果你知道更好的选择排序方法,你能分享一下吗
注意:请仔细检查第二个代码,因为它比看起来更复杂
class SelectionSort {
public static void selectionSort(double[] list) {
for (int i = 0; i < list.length - 1; i++) {
double currentMin = list[i];
int currentMinIndex = i;
for (int j = i + 1; j < list.length; j++) {
if (currentMin > list[j]) {
currentMin = list[j];
currentMinIndex = j;
}
}
if (currentMinIndex != i) {
list[currentMinIndex] = list[i];
list[i] = currentMin;
}
}
}
}
class SelectionSort {
public static double[] selectionSort(double[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < i; j++) {
if (array[j] > array[i]) {
double temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
}
}
# 1 楼答案
这两种方法都能解决你的问题,但第二种方法很明显,我认为会更快。为什么?因为它必须采取较少的行动来完成问题:在第一个循环中,你有两个循环(就像在第二个循环中一样),但在第二个循环中,它也必须做出2个ifs和1个if。我对此并不十分确定,但是,如果程序必须采取更少的行动,它会更快(只是一个假设)
另外,我认为它会更快,因为在第一个例子中,你需要遍历所有的
j
元素,其中一些元素是不必要的(你必须做一个额外的if),而在第二个例子中,你只需要遍历你需要的元素,所以它也更有效总之,我认为你必须使用的最佳实践是第二种
我希望这会对你有所帮助
# 2 楼答案
就性能而言,两者都是相似的,O(n2)。不过,第二个代码要干净一些