选择排序
public static void selectSort(int[] arr) {...}:这是一个静态方法定义,接收一个整数数组参数arr。- 在
selectSort方法中,使用了两个嵌套的for循环: - 外层循环用于控制排序的轮数。从数组的第一个元素开始,直到数组的倒数第二个元素,因为当只剩下一个元素时,它自然就是最大的,不需要再排序。
- 内层循环用于在每次外层循环中,从当前元素的下一个位置开始,遍历数组的其余部分,找到最小的元素。
- 在内层循环中,
min变量用来记录当前找到的最小元素的索引。如果找到一个比当前min索引位置的元素更小的元素,就更新min为新的最小值的索引。 - 每次内层循环结束后,找到了当前排序范围(从当前位置到数组末尾)内的最小值的索引。然后将最小值与当前位置(由外层循环索引
i表示)的元素交换。
整个算法通过多次迭代,每次将未排序部分中的最小元素放到已排序部分的末尾,从而实现整个数组的排序。
/**
* 选择排序
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[]{3, 5, 22, 111, 5};
selectSort(arr);
}
/**
* 算法思路
* <p>
* 数组长度为 n
* 0到n-1中找出最小数的下标min,arr[min]和arr[0]交换,第一次交换后数组中最小的数在数组的0下标的位置
* 1到n-1中找出最小数的下标min,arr[min]和arr[1]交换,第二次交换后数组中剩下数的最小的数在数组的1下标的位置
* ......
* 以此类推
*/
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
//找出数组中的最小索引下标
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
//交换数据
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
}