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.
- Ingrese el tamaño y los elementos en la matriz. Guárdelos en alguna variable, digamos
size
yarr
. - Declarar dos funciones con prototipo
int sortAscending(int * num1, int * num2)
yint sortDescending(int * num1, int * num2)
.Ambas funciones se utilizan para comparar dos elementos y organizarlos en orden ascendente o descendente.
sortAscending()
devuelve valor negativo sinum1
es menor quenum2
, valor positivo sinum1
es mayor quenum2
y cero si ambos son iguales.Del mismo modo,
sortDescending()
devuelve valor negativo sinum1
es mayor quenum2
, valor positivo sinum2
es mayor quenum1
y cero si ambos son iguales. - 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 desortAscending()
función, de lo contrariosortDescending()
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.