int minIndex = i; 这里定义不也是多余吗?这里感觉j = i + 1更合理吧
来源:1-2 实现选择排序法
qq_ARetardedPer_0
2021-06-25 15:39:51
public class Test02_SortBasic01_SelectSort02 {
public static void main(String[] args) {
int[] arr = new int[]{4,1,2,3,7,5,6,8};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
System.out.println("排序后:");
selectSort(arr);
System.out.println(Arrays.toString(arr));
}
/**
* 选择排序
* @param data
*/
public static void selectSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
//int minIndex = i; 这里定义不也是多余吗?
for (int j = i + 1; j < arr.length; j++) {//这里感觉j = i + 1更合理吧
if(arr[j] < arr[i]){
swap(arr,i,j);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
1回答
liuyubobobo
2021-06-25
可以的,但这样做的缺点是,产生了多次的 swap。课程中的做法只记录了最小值对应的索引,最终,内层循环只使用了一次 swap。
你的逻辑是正确的,这两种代码的复杂度也是一致的。通常算法实现中,对于复杂度一致的算法,如没有特殊情况,无需较真。了解复杂度级别的优化,是这个课程的重点:)
继续加油!:)
相似问题
回答 3
回答 1