直选选择排序与交换选择排序

时间:2010-10-28 14:29:03

标签: algorithm sorting terminology

直接选择排序交换选择排序之间有什么区别?我今天进行了一些辩论 - 我的教授在他的讲义中使用了这两个术语。维基百科和任何教科书或网站给你的选择排序就是他所谓的“交换选择排序”。

我从未听过之前使用的“交换选择排序”一词(仅“选择排序”),并且无法在线查找以前术语的任何相关资源。此外,“交换排序”重定向到维基百科上的冒泡排序。

我之前从未听说过“直选择排序”一词,也无法在网上找到任何相关资源。他的笔记说明它是选择排序的一个版本,它使用辅助数组而不是就地排序,从最小到最大的元素一个接一个地填充它。当我提出这个问题时,他声称它已经老了,仅仅是因为它没有出现在谷歌上并不意味着它是不正确的。但是,我在Google上发现了更加模糊不清的东西,而像选择排序这样的东西将在网络上拥有大量的资源。

那么,这些算法是否采用其他名称?他的名字错了吗?谁是对的?

1 个答案:

答案 0 :(得分:5)

我之前没有听过那些确切的用语,但它们对我有意义。只要你明白他们正在做什么,我认为这个术语并不重要。

如果您要创建列表的已排序副本,则可以从旧列表的最小值逐个创建新列表中的每个项目; “直”似乎对此有任何合理的描述。

OTOH如果您正在对列表进行排序,那么每次将新项目移动到列表的头部时,您必须将之前存在的项目向后移动以腾出空间。在数组列表中,最便宜的方法是离开新的最小项目和旧项目交换位置:交换。 (在链表中,让列表的整个尾部滑回一个位置会更快。)

教科书倾向于专注于就地排序。