内部循环标记出位置,进行交换,只交换一次;从后往前插入(如果是链表,从前往后插入较好)
和 冒泡 比较:
1、 冒泡比较前后两个进行交换
2、选择排序每次找到最小的,和相应位置交换
/**
* 选择排序算法 O(n²)
* 1、内部循环标记出位置,进行交换,只交换一次
* 2、和 冒泡 比较,
* 冒泡比较前后两个进行交换
* 选择每次找到最小的,和相应位置交换
*/
public class SelectionSort {
private SelectionSort(){}
public static <E extends Comparable<E>> void sort(E[] arr){
for (int i=0;i<arr.length;i++){
int minIndex = i;//最小索引值
for (int j=i;j<arr.length;j++){
if (arr[j].compareTo(arr[minIndex])<0) {
minIndex = j;
}
}
swap(arr,i,minIndex);
}
}
private static <E> void swap(E[] arr,int i,int j){
E t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}