Сортировка двумерного массива в C с помощью встроенных функций или альтернативных методов
Сортировка двумерного массива в C представляет собой уникальную задачу, поскольку встроенные функции, такие как std::sort(), обычно предназначены для одномерных массивов. Однако в определенных случаях вам может потребоваться отсортировать 2D-массив на основе определенных критериев, например, сравнить только значения первого столбца.
Использование std::qsort
Хотя в C отсутствует встроенная функция для сортировки по нескольким столбцам, std::qsort() предлагает универсальное решение. Эта функция принимает указатель на массив, размер массива, размер элементов внутри массива и функцию сравнения. Предоставляя пользовательскую функцию сравнения, вы можете указать критерии сортировки на основе определенных элементов массива.
Функция сравнения для пользовательской сортировки
Функция сравнения должна возвращать целочисленный результат на основе сравнения двух элементов массива. В случае двумерного массива вам потребуется доступ к отдельным элементам с помощью арифметики указателей. Рассмотрим следующий пример:
int qsort_compare(const void *arg1, const void *arg2) {
int const *lhs = static_cast(arg1);
int const *rhs = static_cast(arg2);
return (lhs[0] Эта функция сравнения сравнивает первый элемент (эквивалент первого значения столбца) и возвращает соответствующий порядок на основе результата.
Пример реализации
Объединив std::qsort() и пользовательскую функцию сравнения, вы можете отсортировать 2D-массив в C следующим образом:
#include
#include
using namespace std;
int main() {
int ar[5][2] = {
{20, 11},
{10, 20},
{39, 14},
{29, 15},
{22, 23}
};
qsort(ar, 5, sizeof(*ar), qsort_compare);
cout Вывод:
Sorted 2D Array:
10 20
20 11
22 23
29 15
39 14
Этот метод обеспечивает комплексное и эффективное решение для сортировки 2D-массивов в C, хотя он требует создания и использования специальной функции сравнения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3