原理:
某数组arr,从0开始遍历,假设当前下标为i,与之后的所有数字比较大小,如果arr[j]<arr[i],则交换位置
时间复杂度O(N2),空间复杂度O(1)
代码实现1:
//swap次数太多,性能差
public static void selectionSort(int[] arr){
for(int i=0 ; i<arr.length-1 ; i++){
for(int j =i+1 ; j<arr.length ; j++){
if(arr[j] < arr[i]){
swap(j,i,arr);
}
}
}
}
private static void swap(int j,int i,int[]arr){
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
代码实现2:
//引入minIndex,减少swap次数
public static void selectionSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
int minIndex=i;
for(int j=i+1;j<arr.length;j++){
minIndex=arr[j] < arr[minIndex] ? j:minIndex;
}
swap(i,minIndex,arr);
}
}
private static void swap(int j,int i,int[]arr){
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}