2017-09-23 4 views
0

yに基づいてVector2配列を並べ替える最も効率的な方法は何ですか? 例:以下のベクターの配列を考えるVector2の配列をソートするより効率的な方法(「y」減少)ですか?

:そう "Y" で順序付け

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

配列:1まで

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

私が使っている言語は私にこれを与える:

空隙sort_custom(オブジェクトOBJ、文字列FUNC)

カスタムメソッドを使用して配列をソート。引数は、メソッドとそのメソッドの名前を保持するオブジェクトです。カスタムメソッドは2つの引数(配列の要素のペア)を受け取り、最初の引数が2番目の引数よりも小さい場合は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

をそれは、入力セットに依存し、あなたが同じ時間複雑と1つのアルゴリズムが適切なベンチマーキングすることなく、他のより良いを行うかどうかを決定することはできません。私は比較関数は、おそらくインライン化されます

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

カスタム関数でのstd ::並べ替えとなるだろう、そうそこにあなたの構造での作業に重大なオーバーヘッドがあること、および時間効率がOではありません

(n log n)となる。

// EDIT 申し訳ありませんが、私はあなたがC++を使用していると仮定しますが、より一般的な質問のように見えます。だから後者は、std :: sortの代わりに、単純なアルゴリズムの1つを使用し、他のオプションでベンチマークします。まったくのオーバーヘッドはありません。

+0

私はC++を使用していないんだけど、私が使用している言語は私にこれを与える: ' 無効sort_custom(オブジェクトobj、String型のFUNC) ソートカスタムメソッドを使用してアレイ。引数は、メソッドとそのメソッドの名前を保持するオブジェクトです。カスタムメソッドは2つの引数(配列の要素のペア)を受け取り、最初の引数が2番目の引数よりも小さい場合はtrueを返し、そうでない場合はfalseを返します。 ' – PerduGames

+0

私はこのようにそれを得た: ' FUNCのORD(VARのA1、VaRのA2): a1.y> a2.y場合: リターン他の真 : 偽 my_array.sort_custom(自己を、「返しますord ")' – PerduGames

関連する問題