Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengisih Tatasusunan 2D dalam C mengikut Nilai Lajur?

Bagaimana untuk Mengisih Tatasusunan 2D dalam C mengikut Nilai Lajur?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 01:43:02289semak imbas

How to Sort a 2D Array in C   by Column Values?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn