排序演算法比較
選擇排序、合併排序和快速排序之間的區別
該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。
排序是將資料依照一定標準排列的過程。 除了升序數字順序外,您還可以使用多個條件,例如運行狀況、名稱或建立時間。
選擇排序
找到剩餘部分中的最小值並將其替換為前一個部分。
for (int i = 0; i < Count - 1; ++i)
{
int MinIndex = i;
for (int j = i + 1; j < Count; ++j)
{
if (Values[j] < Values[MinIndex])
{
MinIndex = j;
}
}
std::swap(Values[i], Values[MinIndex]);
}
實現起來很容易,但是比較次數O(N²)因此,它不適合大數據。
歸併排序
將數組分成兩半,對每個數組進行排序,然後合併它們。 時間複雜度為O(N log N)它可以實現為穩定排序,但合併需要臨時記憶體。
快速排序
根據樞軸劃分小值和大值並重新排列每個部分。 平均值是O(N log N)然而,如果樞軸選擇仍然很糟糕,O(N²)你可以去
在實際的 C++ 程式碼中,您不需要自己重新建立對齊方式,std::sort和std::stable_sort先用。
std::sort(Units.begin(), Units.end(),
[](const Unit& A, const Unit& B)
{
return A.Speed > B.Speed;
});
透過研究直接實現演算法和在產品程式碼中使用經過驗證的標準庫具有不同的目的。