Mengisih Tatasusunan 2D dalam C : Fungsi Terbina Dalam dan Pelaksanaan Tersuai
Pengenalan
Mengisih tatasusunan berbilang dimensi dalam C boleh menjadi tugas yang kompleks. Artikel ini meneroka keupayaan fungsi terbina dalam dan menyediakan pelaksanaan tersuai untuk menyusun tatasusunan 2D dengan berkesan berdasarkan nilai lajur.
Fungsi Terbina Dalam
C menawarkan fungsi terbina dalam terhad untuk menyusun tatasusunan berbilang dimensi. Fungsi std::qsort membenarkan untuk mengisih tatasusunan saiz tetap untuk sebarang jenis. Walau bagaimanapun, ia tidak menyediakan keupayaan langsung untuk mengisih tatasusunan berbilang lajur.
Pelaksanaan Tersuai
Untuk pengisihan berbilang lajur, pelaksanaan tersuai menggunakan fungsi pembanding boleh dimanfaatkan. Pendekatan ini memerlukan penyesuaian fungsi std::sort terbina dalam, yang beroperasi pada elemen dalam tertib menaik secara lalai.
Fungsi pembanding mengambil dua tatasusunan sebagai input dan membandingkannya berdasarkan nilai lajur yang dikehendaki. Dalam kes anda, anda ingin mengisih tatasusunan 2D dengan membandingkan nilai lajur pertama. Berikut ialah pelaksanaan C:
<code class="cpp">int comparator(int const *lhs, int const *rhs) { return (lhs[0] < rhs[0]) ? -1 : ((rhs[0] < lhs[0]) ? 1 : (lhs[1] < rhs[1] ? -1 : ((rhs[1] < lhs[1] ? 1 : 0)))); }
Dalam pembanding ini, kami melonjakkan penyataan ternary untuk membandingkan nilai lajur pertama dan kemudian nilai lajur kedua untuk memutuskan hubungan.
Penggunaan
Untuk mengisih tatasusunan menggunakan pembanding, anda boleh memanggil fungsi std::sort dengan tatasusunan dan pembanding sebagai hujah:
<code class="cpp">std::sort(std::begin(ar), std::end(ar), comparator);
Contoh
Berikut ialah contoh yang menunjukkan pengisihan tersuai pelaksanaan:
<code class="cpp">#include <iostream> #include <algorithm> int ar[10][2] = { {20, 11}, {10, 20}, {39, 14}, {29, 15}, {22, 23} }; int main() { int comparator(int const *lhs, int const *rhs); // Sort the array std::sort(std::begin(ar), std::end(ar), comparator); // Display the sorted array for (int i = 0; i < 10; i++) { std::cout << ar[i][0] << " " << ar[i][1] << '\n'; } return 0; }</code>
Output:
10 20 20 11 22 23 29 15 39 14
Kesimpulan
Sementara C tidak mempunyai fungsi terbina dalam khusus untuk pengisihan tatasusunan berbilang lajur, pelaksanaan tersuai menggunakan fungsi pembanding menyediakan penyelesaian yang cekap dan fleksibel. Pendekatan ini membolehkan anda menentukan kriteria pengisihan yang diingini dan menyesuaikan gelagat pengisihan berdasarkan keperluan khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk Mengisih Tatasusunan 2D dalam C mengikut Nilai Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!