一、核心思路:定第一个最大,比其大着覆盖,比其小着交换
二、过程:第一趟,选择所有元素中最小的,和第一位交换
第二趟,选择第二位及以后所有元素中最小的,和第二位交换
三、时间复杂度:O(n²)
四、空间复杂度:O(1)
五、原址排序
六、稳定性:相对位置发生了变化,因此不稳定
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int arr[]=getRandomArr(10,1,20);
System.out.println("原数组:"+Arrays.toString(arr));
selectSort(arr);
System.out.println("排序后:"+Arrays.toString(arr));
}
//选择排序
public static void selectSort(int[] arr) {
for (int i = 0; i <arr.length-1; i++) {
int min = i;
for (int j = min + 1; j <=arr.length-1; j++) {
if (arr[min]>=arr[j])
min = j; // 覆盖
}
swap(arr, i, min); // 交换
}
}
//随机数组
public static int[] getRandomArr(int length, int min, int max) {
int arr[]=new int[length];
for(int i=0;i<length;i++) {
arr[i]=(int)(Math.random()*(max-1+min)+min);
}
return arr;
}
public static void swap(int[] arr, int i, int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}