Closed lllxxxhhhh closed 4 years ago
原因发现在这里,注释的代码就是比没注释的那一段运行时间长
for (int i = left + 1; i < right; i++) {
// if (arr[i].compareTo(arr[minIndex]) < 0) {
// minIndex = i;
// } else if (arr[i].compareTo(arr[maxIndex]) > 0) {
// maxIndex = i;
// }
if (arr[minIndex].compareTo(arr[i]) > 0) {
minIndex = i;
} else if (arr[maxIndex].compareTo(arr[i]) < 0) {
maxIndex = i;
}
}
试一试让数据规模更大,测试结果在“秒”的级别而非“毫秒级别”,是否也是如此?
试一试让数据规模更大,测试结果在“秒”的级别而非“毫秒级别”,是否也是如此? 我使用了50000个数据,20次取得平均值 SelectionSort2比SelectionSort确实有优化,但是当两个for循环里边if判断写的顺序不一样的时候,测试结果差距还是不小的,刚刚评论说反了,注释的代码运行时间短
for (int i = left + 1; i < right; i++) { if (arr[minIndex].compareTo(arr[i]) > 0) { minIndex = i; } else if (arr[maxIndex].compareTo(arr[i]) < 0) { maxIndex = i; } }
当if语句这样判断的时候,运行结果是
SelectionSort 3.8320816150000008 SelectionSort2 3.581676555
for (int i = left + 1; i < right; i++) { if (arr[i].compareTo(arr[minIndex]) < 0) { minIndex = i; } else if (arr[i].compareTo(arr[maxIndex]) > 0) { maxIndex = i; } }
当if语句这样判断的时候,运行结果是
SelectionSort 3.7201685549999994 SelectionSort2 2.4815695550000005
我刚看到你说的是 selectionSort,一直以为是 InsertionSort。课程没有设置 selectionSort 的优化。你的实现也和我的实现完全不一样。我的实现不需要记录 maxIndex。
这个写法视频里没有,在源码里边的实现有,在这个路径下给出的02-Sorting-Basic\Course Code (Java)\Optional-01-Optimized-Selection-Sort ,里边的SelectionSort2
明白了 把问题放到问答区吧 我不在 github 下答疑。
当我测试选择排序优化与为优化代码对比的时候,发现当数组元素在几百个的时候优化效果明显,当达到1000以上,多次测试基本优化代码运行时间都比未优化的时间长
运行结果基本保持在