之前看视频上是这样讲的
private void selectSort1(int[] arr){
for (int i=0;i<arr.length-1;i++){
for (int j=i+1;j<arr.length;j++){
// 不断把更小的换到i 位置
if (arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
看上是这样的,这样效率略高,减伤了交换次数
private void selectSort2(int[] arr){
int min;
for (int i=0;i<arr.length-1;i++){
min = i;
for (int j=i+1;j<arr.length;j++){
// 如果发现更小的就更新最小角标,而不是取交换
if (arr[min]>arr[j])
min = j;
}
// 如果min 变了,说明发现更小的了,所以交换,
// 这样一轮只交换了这一次,效率略高
if (i != min){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
时间复杂度
比较 交换
最好 n^2 + 0 -> n^2
最坏 n^2 + n-1 -> n^2