Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengisih Tatasusunan 2D mengikut Nilai Lajur 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.
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>
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.
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>
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!