1、arr[0]-arr[n-1]的数组中选择一个最小值min,并与arr[0]的元素进行交换
2、arr[1]-arr[n-1]的数组中选择最小值min,并与arr[1]的元素进行交换
…
以此类推,每次在(i+1)-(arr.length-1)之间选择最小值,总共进行arr.length-1次
时间复杂度:O(n^2)
空间复杂度O(1)
不稳定算法(如果在原序列中,a在b的前面,且a==b,那么在排序后不会产生a跑到b后面的情况,就是稳定算法)
分步写:
int min = arr[0];
int minIndex = 0;
for(int i =1;i<arr.length;i++){
if(arr[i]<min){
min = arr[i];
minIndex = i;
}
}
arr[minIndex] = arr[0];
arr[0] = min;
System.out.println(Arrays.toString(arr));
min = arr[1];
minIndex = 1;
for(int i =1+1;i<arr.length;i++){
if(arr[i]<min){
min = arr[i];
minIndex = i;
}
}
arr[minIndex] = arr[1];
arr[1] = min;
System.out.println(Arrays.toString(arr));
min = arr[2];
minIndex = 2;
for(int i =1+2;i<arr.length;i++){
if(arr[i]<min){
min = arr[i];
minIndex = i;
}
}
arr[minIndex] = arr[2];
arr[2] = min;
System.out.println(Arrays.toString(arr));
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[]{5,4,3,2,1};
int min;
int minIndex;
for (int i = 0; i < arr.length-1; i++) {
min = arr[i];
minIndex = i;
for (int j = i + 1 ; j < arr.length ; j++) {
if(arr[j]<min){
minIndex = j;
}
}
if(minIndex!=i){
arr[i] = arr[minIndex];
arr[minIndex] = min;
}
}
System.out.println(Arrays.toString(arr));
}
}