Ordenar una matriz 2D en C con funciones integradas o métodos alternativos
Ordenar una matriz 2D en C presenta un desafío único, ya que Las funciones integradas como std::sort() normalmente están diseñadas para matrices 1D. Sin embargo, hay casos específicos en los que es posible que desee ordenar una matriz 2D según criterios específicos, como comparar solo los valores de la primera columna.
Utilizando std::qsort
Si bien C carece de una función incorporada directa para la clasificación de varias columnas, std::qsort() ofrece una solución versátil. Esta función toma un puntero a una matriz, el tamaño de la matriz, el tamaño de los elementos dentro de la matriz y una función de comparación. Al proporcionar una función de comparación personalizada, puede especificar los criterios de clasificación basados en elementos de matriz específicos.
Función de comparación para clasificación personalizada
La función de comparación debe devolver un resultado entero basado en la comparación de dos elementos de la matriz. En el caso de una matriz 2D, necesitará acceder a elementos individuales mediante aritmética de punteros. Considere el siguiente ejemplo:
int qsort_compare(const void *arg1, const void *arg2) {
int const *lhs = static_cast(arg1);
int const *rhs = static_cast(arg2);
return (lhs[0] Esta función de comparación compara el primer elemento (equivalente al valor de la primera columna) y devuelve un orden apropiado según el resultado.
Ejemplo de implementación
Combinando std::qsort() y la función de comparación personalizada, puede ordenar una matriz 2D en C de la siguiente manera:
#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 Salida:
Sorted 2D Array:
10 20
20 11
22 23
29 15
39 14
Este método proporciona una solución integral y eficiente para ordenar matrices 2D en C, aunque requiere la creación y el uso de una función de comparación personalizada.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3