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

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

Mary-Kate Olsen
Lepaskan: 2024-11-08 12:24:01
asal
453 orang telah melayarinya

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

Mengisih Tatasusunan 2D mengikut Nilai Lajur Menggunakan Fungsi Terbina dalam atau Kaedah Tersuai dalam C

Dalam C , tidak seperti Java, tiada fungsi terbina dalam langsung yang boleh mengisih tatasusunan 2D mengikut nilai lajur tertentu. Walau bagaimanapun, pelbagai pendekatan boleh digunakan untuk mencapai gelagat pengisihan yang diingini ini.

Menggunakan Fungsi Perpustakaan Standard C

Satu kaedah melibatkan penggunaan fungsi std::qsort, yang merupakan algoritma pengisihan generik. Dengan mentakrifkan fungsi pembanding tersuai, anda boleh mengawal logik pengisihan berdasarkan nilai lajur. Berikut ialah contoh pelaksanaan:

<code class="cpp">#include <iostream>
#include <algorithm>

int compareArrayColumns(int **lhs, int **rhs) {
  return (*lhs)[0] < (*rhs)[0];
}

int main() {
  int arr[][2] = {
    {20, 11},
    {10, 20},
    {39, 14},
    {29, 15},
    {22, 23}
  };

  std::qsort(arr, 5, sizeof(*arr), (int (*)(const void *, const void *))compareArrayColumns);

  for (int i = 0; i < 5; ++i) {
    std::cout << arr[i][0] << " " << arr[i][1] << std::endl;
  }

  return 0;
}</code>
Salin selepas log masuk

Dalam kod ini, fungsi compareArrayColumns digunakan untuk membandingkan nilai lajur pertama setiap baris tatasusunan. Pengisihan dilakukan menggunakan fungsi std::qsort dan tatasusunan 2D yang diisih dicetak.

Menggunakan Kaedah Tersuai

Pendekatan lain melibatkan mencipta fungsi isihan tersuai yang melaksanakan logik yang diingini. Berikut ialah contoh pelaksanaan menggunakan isihan gelembung:

<code class="cpp">#include <iostream>

void bubbleSortByColumn(int arr[][2], int size) {
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size - 1; ++j) {
      if (arr[j][0] > arr[j + 1][0]) {
        int temp[2];
        temp[0] = arr[j][0];
        temp[1] = arr[j][1];
        arr[j][0] = arr[j + 1][0];
        arr[j][1] = arr[j + 1][1];
        arr[j + 1][0] = temp[0];
        arr[j + 1][1] = temp[1];
      }
    }
  }
}

int main() {
  int arr[][2] = {
    {20, 11},
    {10, 20},
    {39, 14},
    {29, 15},
    {22, 23}
  };

  int size = sizeof(arr) / sizeof(arr[0]);
  bubbleSortByColumn(arr, size);

  for (int i = 0; i < size; ++i) {
    std::cout << arr[i][0] << " " << arr[i][1] << std::endl;
  }

  return 0;
}</code>
Salin selepas log masuk

Dalam kod ini, fungsi bubbleSortByColumn melaksanakan algoritma isihan gelembung mudah yang berulang melalui tatasusunan dan menukar baris berdasarkan nilai lajur pertama. Tatasusunan 2D yang diisih kemudiannya dicetak.

Pilihan pendekatan bergantung pada keperluan khusus dan pertimbangan prestasi aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Tatasusunan 2D mengikut Nilai Lajur dalam C?. 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