算法思想:
每趟排序都从待排序数中选择一个最小的(或者最大的)数,交换到对应的位置。
算法描述:
- 从 i = 0 开始,通过遍历找到下标在 [i, n-1] 中的最小值的下标 index;
- 交换下标为 i 和下标为 index 位置的数据;
- i ++,继续执行第一步,直到 i >= n-1
算法特点:
- 每趟排序只交换一次
- 选择排序是时间复杂度最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
- 不稳定排序算法。
import java.util.Scanner;
/**
* 选择排序是最稳定的排序算法之一,无论什么数据进去都是O(n<sup>2</sup>)的时间复杂度。<br>
* 所以使用选择排序时,数据规模越小越好。<br>
* 唯一的好处可能就是不需要占用额外空间。
*/
public class SelectSort {
/**
* 升序排序:从小到大
*/
public void selectSort(int[] arr) {
int len = arr.length;
int minIndex;// 记录最小值所在下标
for (int i = 0; i < len-1; i++) {
minIndex = i;// 初始化最小值的下标为本趟排序的起始位置
for (int j = i+1; j < len; j++) {
if (arr[minIndex] > arr[j])
minIndex = j;
}
swap(arr, minIndex, i);
}
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}