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。


你的逻辑是正确的,这两种代码的复杂度也是一致的。通常算法实现中,对于复杂度一致的算法,如没有特殊情况,无需较真。了解复杂度级别的优化,是这个课程的重点:)


继续加油!:)

1

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2584 学习 · 1063 问题

查看课程