写一个方法实现“选择排序算法”,并解释下时间复杂度和空间复杂度

function selectionSort(arr) {
  const n = arr.length;

  for (let i = 0; i < n - 1; i++) {
    // Find the minimum element in the unsorted part of the array
    let minIndex = i;
    for (let j = i + 1; j < n; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }

    // Swap the found minimum element with the first element of the unsorted part
    if (minIndex !== i) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]; // Using ES6 destructuring for swap
    }
  }

  return arr;
}


// Example usage:
const unsortedArray = [64, 25, 12, 22, 11];
const sortedArray = selectionSort(unsortedArray);
console.log(sortedArray); // Output: [11, 12, 22, 25, 64]



时间复杂度:

选择排序的时间复杂度始终为 O(n^2),其中 n 是数组的长度。这是因为外层循环运行 n-1 次,内层循环的迭代次数从 n-1 递减到 1。无论输入数组是否有序,都需要进行这些比较和交换。

  • 最佳情况: O(n^2) 即使数组已经排序,算法仍然会执行所有的比较。
  • 平均情况: O(n^2)
  • 最坏情况: O(n^2)

空间复杂度:

选择排序的空间复杂度为 O(1),也称为常量空间复杂度。这是因为它只使用了几个额外的变量(minIndexij,以及用于交换的临时变量), 这些变量的数量不随输入数组的大小而变化。 排序是在原数组上进行的,没有使用额外的数组或数据结构来存储元素。 因此,无论输入数组的大小如何,所需的额外空间都保持不变。

总结:

选择排序是一种简单的排序算法,易于理解和实现。然而,由于其 O(n^2) 的时间复杂度,对于大型数据集来说效率不高。 对于小型数据集或对性能要求不高的场景,它可能是一个合适的选择。 如果处理大型数据集,建议考虑更高效的排序算法,例如归并排序或快速排序,它们的时间复杂度为 O(n log n)。

posted @   王铁柱6  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示