推荐答案
-- -------------------- ---- ------- -------- ------------------ - ----- --- - ----------- --- ---- - - -- - - --- - -- ---- - --- -------- - -- --- ---- - - - - -- - - ---- ---- - -- ------- - -------------- - -------- - -- - - -- --------- --- -- - -------- -------------- - --------------- -------- - - ------ ---- -
本题详细解读
选择排序的基本思想
选择排序是一种简单直观的排序算法。它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
代码解析
外层循环:
for (let i = 0; i < len - 1; i++)
外层循环从数组的第一个元素开始,遍历到倒数第二个元素。每次循环都会确定一个最小元素的位置。内层循环:
for (let j = i + 1; j < len; j++)
内层循环从当前外层循环的下一个元素开始,遍历到数组的最后一个元素。内层循环的目的是找到当前未排序部分的最小元素。找到最小元素:
if (arr[j] < arr[minIndex])
在内层循环中,如果发现比当前最小元素更小的元素,则更新最小元素的索引。交换元素:
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]
如果最小元素的索引发生了变化(即找到了比当前元素更小的元素),则交换这两个元素的位置。返回排序后的数组:
return arr
最终返回排序后的数组。
时间复杂度
- 最好情况:O(n²)
- 最坏情况:O(n²)
- 平均情况:O(n²)
选择排序的时间复杂度为O(n²),因为它需要两层嵌套循环来遍历数组。
空间复杂度
选择排序的空间复杂度为O(1),因为它是一个原地排序算法,不需要额外的存储空间。
适用场景
选择排序适用于数据量较小的情况,或者对内存使用有严格限制的场景。由于其时间复杂度较高,不适合处理大规模数据。