这被认为是一个选择排序吗?



我在练习前一段时间遇到了选择排序。在不同的源代码之间进行了一些研究之后,有一些声明了一个数组,然后删除当前的最小位置,而另一些则在数组

中交换。我尝试用ES6来实现一些琐碎的功能,没有使用map,因为我想理解白板上的循环。

这被认为是一个选择排序吗?

selectionSortNoSwap = list)= => {
const result = [];
for (let i = 0; i < list; i++) {
const min = Math.min(...list);
const minIndex = list.indexOf(min);
result.push(min);
list.splice(minIndex, 1);
}
return result;
};
selectionSortNoSwap([3, 5, 2, 1, 4]);

谢谢

No。True选择排序对就地排序,而不是创建另一个数组。也就是说,给定:

[3, 5, 2, 1, 4]

在第一次迭代之后,选择排序应该在内存中产生以下数据结构:

[1, 5, 2, 3, 4]

,其中1和3已经交换-而不是

[3, 5, 2, 4]
[1]

如果元素之间没有交换,则不是选择排序。

要就地排序,您需要像

这样的东西

const selectionSort = (list) => {
for (let i = 0; i < list.length; i++) {
// for convenience - or use a for loop 
const min = Math.min(...list.slice(i));
const minIndex = list.indexOf(min, i);
[list[i], list[minIndex]] = [list[minIndex], list[i]];
}
return list;
};
console.log(selectionSort([3, 5, 2, 1, 4]));