使用內建函數或替代方法對C 中的2D 數組進行排序
在C 中對2D 數組進行排序提出了獨特的挑戰,因為std::sort() 等內建函數通常是為一維數組設計的。但是,在某些特定情況下,您可能想要根據特定條件對 2D 陣列進行排序,例如僅比較第一列值。
利用std::qsort
雖然C 缺乏用於多列排序的直接內建函數,但std::qsort() 提供了一個通用的解決方案。此函數接受一個指向陣列的指標、陣列的大小、陣列中元素的大小、一個比較函數。透過提供自訂比較函數,您可以根據特定陣列元素指定排序條件。
自訂排序的比較函數
比較函數必須傳回整數結果基於兩個陣列元素的比較。對於二維數組,您需要使用指標算術存取各個元素。考慮以下範例:
<code class="cpp">int qsort_compare(const void *arg1, const void *arg2) { int const *lhs = static_cast<int const*>(arg1); int const *rhs = static_cast<int const*>(arg2); return (lhs[0] < rhs[0]) ? -1 : ((rhs[0] < lhs[0]) ? 1 : (lhs[1] < rhs[1] ? -1 : ((rhs[1] < lhs[1] ? 1 : 0)))); }
此比較器函數比較第一個元素(相當於第一列值)並根據結果傳回適當的排序。
範例實作
結合std::qsort() 和自訂比較函數,您可以在C 中對二維陣列進行排序,如下所示:
<code class="cpp">#include <iostream> #include <algorithm> using namespace std; int main() { int ar[5][2] = { {20, 11}, {10, 20}, {39, 14}, {29, 15}, {22, 23} }; qsort(ar, 5, sizeof(*ar), qsort_compare); cout << "Sorted 2D Array:" << endl; for (int i = 0; i < 5; i++) { cout << ar[i][0] << " " << ar[i][1] << endl; } return 0; }</code>
輸出:
Sorted 2D Array: 10 20 20 11 22 23 29 15 39 14
此方法為C 語言排序2D 陣列提供了全面且高效的解決方案,儘管它需要創建和使用自定義比較函數。
以上是如何使用內建函數或自訂方法對 C 中的二維數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!