【发布时间】:2020-12-05 02:30:52
【问题描述】:
我读过很多主题,人们通常说选择排序在最佳情况下的复杂度仍然是 O(n^2)。但我不能被这些想法说服。 例如,我想按 升序 顺序对数组进行排序。这是我在 Java 代码中的算法:
void selectionSort(int[] arr) {
int min, temp;
int length = arr.length;
for (int i = 0; i <= length - 1; i++) {
//System.out.println(i);
min = i;
for (int j = i+1; j < length ; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
} else {
break;
}
}
}
我相信在最好的情况下这是 O(n),即输入数组已经排序。 我在算法中添加的另一件事是检查 if (min == i) 并打破循环。 你怎么看?我错了吗?
【问题讨论】:
-
是的,这是 O(n) 时间的最佳情况,但此代码 不是 选择排序(或任何排序),因为它一旦找到位于正确的位置。例如 [0, 2, 1] 排序不正确。
-
你的例子很清楚。现在我明白了!
标签: algorithm sorting time-complexity selection-sort