programa C para ordenar una matriz usando punteros

programa C para ordenar una matriz usando punteros

Escriba un programa en C para ingresar elementos en una matriz y ordenar la matriz usando punteros. Cómo ordenar una matriz en orden ascendente o descendente usando punteros de función en programación C. Lógica para ordenar una matriz usando punteros en el programa.

Ejemplo

Entrada

Input array elements: 10 -1 0 4 2 100 15 20 24 -5

Salida

Array in ascending order: -5, -1, 0, 2, 4, 10, 15, 20, 24, 100,
Array in descending order: 100, 24, 20, 15, 10, 4, 2, 0, -1, -5,

Conocimiento requerido

Programación básica en C, matriz, funciones, punteros, punteros de función

Lógica para ordenar una matriz usando punteros

A continuación se muestra la lógica descriptiva paso a paso para ordenar una matriz usando un puntero.

  1. Ingrese el tamaño y los elementos en la matriz. Guárdelos en alguna variable, digamos size y arr .
  2. Declarar dos funciones con prototipo int sortAscending(int * num1, int * num2) y int sortDescending(int * num1, int * num2) .

    Ambas funciones se utilizan para comparar dos elementos y organizarlos en orden ascendente o descendente. sortAscending() devuelve valor negativo si num1 es menor que num2 , valor positivo si num1 es mayor que num2 y cero si ambos son iguales.

    Del mismo modo, sortDescending() devuelve valor negativo si num1 es mayor que num2 , valor positivo si num2 es mayor que num1 y cero si ambos son iguales.

  3. Declare otra función para ordenar la matriz con el prototipo void sort(int * arr, int size, int (* compare)(int *, int *)) .

    Se necesitan tres parámetros, donde el primer parámetro es la matriz a ordenar, el segundo es el tamaño de la matriz y el tercero es un puntero de función.

    Nota: El puntero de función que se pasa aquí decidirá la relación entre dos elementos que se ordenarán. Si desea ordenar los elementos en orden ascendente, pase la referencia de sortAscending() función, de lo contrario sortDescending() función.

    Para ordenar una matriz, he usado un algoritmo de clasificación básico. El algoritmo no es eficiente en comparación con otros algoritmos de clasificación modernos, pero es fácil de entender y usar.

Programa para ordenar una matriz usando punteros

/**
 * C program to sort an array using pointers.
 */

#include <stdio.h>

#define MAX_SIZE 100


/* Function declaration */
void inputArray(int * arr, int size);
void printArray(int * arr, int size);

/* Sort function declaration */
int sortAscending(int * num1, int * num2);
int sortDescending(int * num1, int * num2);

void sort(int * arr, int size, int (* compare)(int *, int *));



int main()
{
    int arr[MAX_SIZE];
    int size;

    /*
     * Input array size and elements.
     */
    printf("Enter array size: ");
    scanf("%d", &size);
    printf("Enter elements in array: ");
    inputArray(arr, size);


    printf("\n\nElements before sorting: ");
    printArray(arr, size);


    // Sort and print sorted array in ascending order.
    printf("\n\nArray in ascending order: ");
    sort(arr, size, sortAscending);
    printArray(arr, size);


    // Sort and print sorted array in descending order.
    printf("\nArray in descending order: ");
    sort(arr, size, sortDescending);
    printArray(arr, size);

    
    return 0;
}



/**
 * Function to take input in array elements.
 * 
 * @arr     Array to store input.
 * @size    Size of the array.
 */
void inputArray(int * arr, int size)
{
    // Pointer to last element of array
    int * arrEnd = (arr + size - 1);


    // (arr++) Input in current array element and move to next element.
    // Till last array element (arr <= arrEnd)
    while(arr <= arrEnd)
        scanf("%d", arr++);
}




/**
 * Function to print all array elements.
 * 
 * @arr     Array to print.
 * @size    Size of the array.
 */
void printArray(int * arr, int size)
{
    // Pointer to last element of array
    int * arrEnd = (arr + size - 1);


    // *(arr++) Print current array element and move to next element.
    // Till last array element (arr <= arrEnd)
    while(arr <= arrEnd)
        printf("%d, ", *(arr++));
}



/**
 * Function to compare two succesive elements.
 * The function returns difference of first and second integer.
 * 
 * @num1    First integer to compare.
 * @num2    Second integer to compare.
 *
 * @return  Difference of num1 and num2.
 */
int sortAscending(int * num1, int * num2)
{
    return (*num1) - (*num2);
}



/**
 * Function to compare two successive elements. 
 * The function returns difference of second and first parameter.
 *
 * @num1    First integer to compare.
 * @num2    Second integer to compare.
 *
 * @return  Difference of num2 and num1.  
 */
int sortDescending(int * num1, int * num2)
{
    return (*num2) - (*num1);
}



/**
 * Function to sort an array in ascending or descending order.
 * This function is used to sort array in both order ascending or
 * descending.
 *
 * @arr     Array to sort.
 * @size    Size of the array.
 * @compare Function pointer returning integer and takes two int * 
 *          parameter. The function is called to get arrangement of
 *          two successive array elements.
 */
void sort(int * arr, int size, int (* compare)(int *, int *))
{
    // Pointer to last array element
    int * arrEnd  = (arr + size - 1);

    // Pointer to current array element
    int * curElem = arr;
    int * elemToSort;


    // Iterate over each array element
    while(curElem <= arrEnd)
    {
        elemToSort = curElem;


        // Compare each successive elements with current element
        // for proper order.
        while(elemToSort <= arrEnd)
        {
            /*
             * Compare if elements are arranged in order 
             * or not. If elements are not arranged in order
             * then swap them.
             */
            if(compare(curElem, elemToSort) > 0)
            {
                *curElem    ^= *elemToSort;
                *elemToSort ^= *curElem;
                *curElem    ^= *elemToSort;
            }

            elemToSort++;
        }

        // Move current element to next element in array.
        curElem++;
    }
}

Salida

Enter array size: 10
Enter elements in array: 10 -1 0 4 2 100 15 20 24 -5


Elements before sorting: 10, -1, 0, 4, 2, 100, 15, 20, 24, -5,

Array in ascending order: -5, -1, 0, 2, 4, 10, 15, 20, 24, 100,
Array in descending order: 100, 24, 20, 15, 10, 4, 2, 0, -1, -5,

Publicaciones recomendadas

  • Índice de ejercicios de programación de matrices y arreglos.
  • Programa en C para intercambiar dos números usando punteros.
  • Programa en C para ingresar e imprimir elementos de matriz usando punteros.
  • Programa en C para copiar una matriz a otra usando punteros.
  • Programa en C para intercambiar dos arreglos usando punteros.
  • Programa en C para invertir la matriz usando punteros.
  • Programa en C para buscar un elemento en una matriz usando punteros.