一、原理:
第一次选择出最小的元素与第一个元素交换,第二次从剩余元素中选择出最小的与第二个元素交换,以此类推.。
时间复杂度:O(n^2)
空间复杂度O(1)
稳定性:不稳定(存在元素交换,比如{2,2,1},第一次第一个2会与1进行元素交换)
二、举例
arr ={5,4,3,2,1}
第一次: {1,4,3,2,5}
第二次:{1,2,3,4,5}
第三次:{1,2,3,4,5}
第四次:{1,2,3,4,5}
三、代码实现
import java.util.Arrays;
public class SelectSort {
public static int[] sort(int[] arr) {
int length = arr.length;
//控制交换的次数,最后一次不用交换
for (int i = 0; i < length - 1; i++) {
int min = i;
//遍历剩下元素,选出最小元素
for (int j = i + 1; j < length; j++) {
if (arr[min] > arr[j]) min = j;
}
//将最小元素和index值进行交换
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
return arr;
}
public static void main(String[] args) {
int arr[] = {5, 4, 3, 2, 1};
System.out.println(Arrays.toString(sort(arr)));
}
}
四、优缺点
优点:无需额外的空间,空间复杂度O(1)
缺点:不管插入什么数据,时间复杂度都是O(n^2)