关于minIndex的问题
波波老师,新年快乐哈。有个问题请教下,这个地方是不是不应该采用minIndex中间变量,感觉没有太大的必要,而且还发现个问题,我多试几个数组,会导致输出结果没有满足从小到大排序需求。
这是有中间变量minIndex的
这是没有minIndex的
正在回答 回答被采纳积分+1
你的截图 2 的代码是正确的。不过这个代码调用 swap 的次数远远多于使用 minIndex 的代码。而一次 swap 是三次赋值操作,而使用 minIndex 只需要一次赋值操作。
实际上,这能看出选择排序的一个性质:选择排序是众多排序算法中唯一一个只需要交换 n 次就能完成排序的排序算法。(但需要比较 O(n^2) 次。)
不过,这个性质并没有那么重要,因为不管怎么样,选择排序依然是一个 O(n^2) 级别的算法,所以我也没有过度强调。这类“常数级别”的优化问题不是这个课程的重点。到后续学习你就会看到,一个 O(nlogn) 的排序算法,实现得再烂,也能秒排出 10 万,100 万级别的数据,而一个 O(n^2) 的排序算法,不管怎么实现,连 10 万的数据都将需要好几秒才能搞定。这就是算法的意义。关注复杂度级别的算法优化,是这个课程的重要。
==========
不过我简单测试了一下,对于 10 万的数据,使用 Java 8 和 Java 14,在我的环境下,不使用 minIndex 会比使用 minIndex 慢 3 秒左右。(不同的环境,不同的 Java 版本,测试结果可能有出入。)这个测试可以侧面说明:你给出的代码2看似更“简洁”了,但其实需要的操作是更多的。
具体的测试方式,课程后续会介绍。
==========
对于你都说的“多试几个数组,会导致输出结果没有满足从小到大排序需求”,对于课程的代码,可能性不大。如果真的有,请告诉我:到底是什么测试数据出现了你说的情况?能复现错误是调试错误的第一步。
(大概率是你测试的时候调整了代码,导致运行的代码本身是有问题的。)
新年快乐。继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星