2017-09-23 25 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