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

Linda Hamilton
Lepaskan: 2024-11-06 01:43:02
asal
359 orang telah melayarinya

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))));
}
Salin selepas log masuk

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);
Salin selepas log masuk

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>
Salin selepas log masuk

Output:

10 20
20 11
22 23
29 15
39 14
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan