2017-09-23 83 views
0

以递减的方式基于y排序Vector2数组的最有效方法是什么? 例如:对Vector2数组进行排序的更有效方法(“y”正在递减)?

鉴于矢量的阵列下面:

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:

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

空隙sort_custom(对象OBJ,字符串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") 

回答

1

这取决于输入集,你不能决定一个算法时间复杂度是否会比另一种更好,而不适当的bechmarking 。

我会去的std ::排序与自定义函数

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

比较功能可能会被内联,所以不会对你的工作结构的任何显著的开销和时间效率为O (n log n)。

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

+0

我没有使用C++,但我使用的语言给我: ' 无效sort_custom(obj对象,字符串FUNC) 排序使用自定义的方法数组。参数是一个保存这种方法的方法和名称的对象。自定义方法接收两个参数(数组中的一对元素),如果第一个参数小于第二个参数,则必须返回true,否则返回false。 ' – PerduGames

+0

我得到这样的: ' FUNC ORD(VAR A1,A2变种): 如果a1.y> a2.y: 还真 其他: 返回false my_array.sort_custom(自我“ ORD“)' – PerduGames