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),也称为常量空间复杂度。这是因为它只使用了几个额外的变量(minIndex
,i
,j
,以及用于交换的临时变量), 这些变量的数量不随输入数组的大小而变化。 排序是在原数组上进行的,没有使用额外的数组或数据结构来存储元素。 因此,无论输入数组的大小如何,所需的额外空间都保持不变。
总结:
选择排序是一种简单的排序算法,易于理解和实现。然而,由于其 O(n^2) 的时间复杂度,对于大型数据集来说效率不高。 对于小型数据集或对性能要求不高的场景,它可能是一个合适的选择。 如果处理大型数据集,建议考虑更高效的排序算法,例如归并排序或快速排序,它们的时间复杂度为 O(n log n)。
标签:minIndex,arr,复杂度,算法,数组,排序 From: https://www.cnblogs.com/ai888/p/18578009