选择排序
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
}
int temp = arr[minIdx];
arr[minIdx] = arr[i];
arr[i] = temp;
}
}
优化思路
一种优化方法是减少交换次数。在每次遍历过程中,记录下当前最小值的索引,然后在遍历完之后再进行一次交换操作,而不是每次遍历到一个较小值就进行交换。这样可以减少交换操作的次数,从而提高算法的效率。
另一种优化方法是增加判断,减少比较次数。具体来说,在每次遍历过程中,除了记录最小值的索引之外,还可以记录最小值本身。如果当前遍历到的元素比最小值还要大,则不进行比较操作,直接继续遍历。这样可以减少比较次数,从而提高算法的效率。
第二种优化方式代码
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
int minValue = arr[i];
for (int j = i + 1; j < n; j++) {
if (arr[j] < minValue) {
minIndex = j;
minValue = arr[j];
}
}
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = minValue;
}
}
}