1

我需要一个可以在 Smalltalk 中执行选择排序的项目集合。

最好使用什么?列表、集合、链表等?

4

3 回答 3

1

首先要做的事情:当然,您意识到选择排序是 O(n^2),这意味着无论实现如何,它对于大型集合都是低效的。

从您的角度来看,列表和链表的语义应该相同。两者都允许重复,而 set 不允许。选择列表或集合,具体取决于哪个适合您的数据。

最后,如果列表是数组支持的,而链表只是交换指针,我会使用链表进行排序,因为交换对排序非常关键。

所有这些评论都是通用的;没有一个是 Smalltalk 特有的。如果您学习算法和数据结构,您可以做出更好的选择。

于 2009-10-03T16:49:42.750 回答
1

由于您的列表的长度永远不会改变(选择排序就地工作),请使用数组。否则 OrderedCollection 也会很有趣。

于 2009-10-03T23:52:41.600 回答
0

我同意使用 SortedCollection。例子:

aCollection asSortedCollection:[:a :b|
    "Enter your sort block here. like 'a value > b value'"
]
于 2017-01-20T07:51:21.283 回答