基本思想: 如果有N个元素需要排序,那么首先从N个元素中找到最小的那个元素与第0位置上的元素交换(说明一点,如果没有比原本在第0位置上的元素小的就不用交换了,后面的同样是),然后再从剩下的N-1个元素中找到最小的元素与第1位置上的元素交换之后再从剩下的N-2个元素中找到最小的元素与第2位置上的元素交换…,直到所有元素都排序好(也就是直到从剩下的2个元素中找到最小的元素第N-2位置上的元素交换)。
动图展示:
时间复杂度: 最好:O(n^2) 最坏:O(n^2) 平均:O(n^2)
空间复杂度: O(1)
稳定性: 不稳定
代码实现:
/**
* @Author huang.bX
* @Date 2021/7/13
*/
public class SelectSort {
public static void main(String[] args) {
int [] array = new int[]{3,4,2,7,5,8,1,5,3};
selectSort(array);
System.out.println(Arrays.toString(array));
}
public static void selectSort(int[] array){
//选择排序的次数
for (int i = 0; i < array.length - 1; i++){
int min = array[i];
int minIndex = i;
for (int j = i + 1; j < array.length; j++){
if (min > array[j]){
min = array[j];
minIndex = j;
}
}
if (i != minIndex){
array[minIndex] = array[i];
array[i] = min;
}
}
}
}
测试结果: