个人理解
每一轮拿出一个元素与所有未排序的元素按照指定规则(从大到小 或从小到大)进行一一比较,,找到比自己大或者小的元素之后进行交换位置,依次完成每一轮的比较直到有序。
动图演示
java代码实现
public class SelectSort{
public static void main(String [] args){
int[] arr = {5, 6, 1, 26, 15, 75, 11, 42};
for(int i = 0; i < arr.length-1; i++){
// 记录最小元素下标(默认为第一个元素为最小值)
int index= i;
for(int j = i+1; j < arr.length; j++){
// 用第一个元素和其他元素进行一一比较
if(arr[index] > arr[j]){
// 如果小于则将j赋值给index
index = j;
}
}
// 判断记录最小值的下标是否变化
if(index != i){
int tem = arr[i];
arr[i] = arr[index];
arr[index] = tem;
}
}
}
}
说明
1.什么时候最快?
给定数组元素为有序数列 ,此时时间复杂度为O(n^2)
2.什么时候最慢?
给定数组元素从头到尾都是无序的 ,此时时间复杂度为O(n^2)
3.算法稳定性:不稳定