以递减方式对基于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)
Up 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")
答案 0 :(得分:1)
这取决于输入集,你无法确定一个具有相同时间复杂度的算法是否会比另一个没有正确的bechmarking的算法做得更好。
我会使用自定义函数的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而是使用其中一种快速算法并将其与其他选项进行基准测试。不应该有太大的开销。