【问题标题】:More efficient way to sort an array of Vector2 ("y" decreasing)?对 Vector2 数组进行排序的更有效方法(“y”递减)?
【发布时间】:2017-09-23 22:27:50
【问题描述】:

根据 y 以递减方式对 Vector2 数组进行排序的最有效方法是什么? 示例:

给定下面的向量数组:

Vector2(1, 4)
Vector2(5, 9)
Vector2(0, 3)
Vector2(0, 6)
Vector2(1, -2)

用“y”排序的数组:

Vector2(5, 9)
Vector2(0, 6)
Vector2(1, 4)
Vector2(0, 3)
Vector2(1, -2)

上升 1:

我使用的语言给了我这个:

void sort_custom (Object obj, String func)

使用自定义方法对数组进行排序。参数是一个包含方法和该方法名称的对象。自定义方法接收两个参数(数组中的一对元素),如果第一个参数小于第二个参数,则必须返回 true,否则返回 false。

我得到了这样的答案,@Caribou 回答::

func ord(var a1, var a2):
    if a1.y > a2.y:
        return true
    else: 
        return false

my_array.sort_custom(self, "ord")

【问题讨论】:

    标签: arrays vector


    【解决方案1】:

    这取决于输入集,如果没有适当的基准测试,您无法决定一种具有相同时间复杂度的算法是否会比另一种更好。

    我会使用带有自定义函数的 std::sort

    std::sort(std::begin(arr), std::end(arr), [](auto a1, auto a2) {
        return a1.y < a2.y; 
    });
    

    比较函数可能会被内联,因此在使用您的结构时不会有任何重大开销,并且时间效率为 O(n log n)。

    // 编辑 抱歉,我假设您使用的是 C++,但它看起来像是一个更通用的问题。所以后者成立,但不是 std::sort 而是使用一种快速算法并用其他选项对其进行基准测试。不应该有太多的开销。

    【讨论】:

    • 我没有使用 c++,但是我使用的语言给了我这个:` void sort_custom (Object obj, String func) 使用自定义方法对数组进行排序。参数是一个包含方法和该方法名称的对象。自定义方法接收两个参数(数组中的一对元素),如果第一个参数小于第二个参数,则必须返回 true,否则返回 false。 `
    • 我是这样理解的:` func ord (var a1, var a2): if a1.y> a2.y: return true else: return false my_array.sort_custom (self, "ord") `
    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多