在埃菲尔铁塔中对可比对象集合进行排序的一些方法

Some ways to sort a collection of comparables in eiffel

我应该使用哪个内核库来对 eiffel 中的集合进行排序?

在哪里可以找到排序的例子?典型的冒泡排序等可用吗?

任何带有代理的分类器也将非常有用,以避免必须使用未实现的可比对象来进行分类,例如使用 PATH class

base_extension 提供延迟 class SORTER with effective implementations 冒泡、快速和 shell 排序算法。

它使用比较器对象对任意类型的元素进行比较,不一定是 COMPARABLE 类型。比较器接口的实现之一是 AGENT_EQUALITY_TESTER,您向其传递代理以确定一个对象是否小于另一个对象。

这是一个示例,说明如何使用冒泡排序按路径的规范名称对路径进行排序:

sort_paths (a_paths: INDEXABLE [PATH, INTEGER])
    local
        l_sorter: SORTER [PATH]
    do
        create {BUBBLE_SORTER [PATH]} l_sorter.make
            (create {AGENT_EQUALITY_TESTER [PATH]}.make (
                agent (a_p1, a_p2: PATH): BOOLEAN
                    do
                        Result := a_p1.canonical_path < a_p2.canonical_path
                    end))
        l_sorter.sort (a_paths)
    end

现在,如果有 ARRAYED_LIST [PATH] 类型的路径列表 paths,可以通过调用 sort_paths (paths).

对其进行排序