2017-09-23 2 views
0

Quel est le moyen le plus efficace pour trier un tableau Vector2 basé sur y de manière décroissante? exemple:Manière plus efficace de trier un tableau de Vector2 ("y" décroissant)?

Compte tenu de l'ensemble de vecteurs ci-dessous:

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

tableau pour être commandé avec "y":

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

Up 1:

Le la langue que j'utilise me donne ceci:

sort_custom vide (objet obj, String func)

trier le tableau en utilisant un procédé de mesure. Les arguments sont un objet qui contient la méthode et le nom de cette méthode. La méthode personnalisée reçoit deux arguments (une paire d'éléments du tableau) et doit renvoyer true si le premier argument est inférieur à la seconde et renvoyer false dans le cas contraire.

Je suis comme ça, avec la réponse @Caribou ::

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

my_array.sort_custom(self, "ord") 

Répondre

1

Cela dépend de jeu d'entrée, vous ne pouvez pas décider si un algorithme de complexité même temps fera mieux que l'autre sans bon benchmarking .

Je vais avec std :: sort avec fonction personnalisée

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

La fonction de comparaison sera probablement inline, donc il n'y aura pas de frais généraux importants à travailler avec la structure et l'efficacité du temps est O (n log n). Désolé, je suppose que vous utilisez C++, mais cela ressemble à une question plus générique. Donc, ce dernier tient, mais au lieu de std :: sort, utilisez simplement l'un des algorithmes rapides et comparez-le avec d'autres options. Il ne devrait pas y avoir beaucoup de frais généraux.

+0

Je ne suis pas en C++, mais la langue que je me sers me donne ceci: ' sort_custom void (Object obj, String func) Trier le tableau en utilisant une méthode personnalisée. Les arguments sont un objet qui contient la méthode et le nom de cette méthode. La méthode personnalisée reçoit deux arguments (une paire d'éléments du tableau) et doit renvoyer true si le premier argument est inférieur à la seconde et renvoyer false dans le cas contraire. ' – PerduGames

+0

Je l'ai comme ceci:' func ord (var a1, a2 var): si a1.y> a2.y: return true else: return false my_array.sort_custom (auto, " ord ")' – PerduGames