es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ordenar un arreglo con valores duplicados sin modificar los elementos, sin usar un arreglo secundario o cualquier función incorporada.

Como dice la pregunta, estoy tratando de ordenar una matriz con valores duplicados.
La matriz se ordena correctamente, pero surge un problema cuando se le da un valor duplicado a la matriz.

S/P: sin duplicados


Ingrese el tamaño de la matriz : 5
Ingrese los 5 elementos
7 3 4 8 1
Después de ordenar: 1 3 4 7 8
Valor original de la matriz 7 3 4 8 1

S/P: con duplicados

Ingrese los 5 elementos
5 3 1 1 4
Después de ordenar: 1 3 4 1 3
Valor original de la matriz 5 3 1 1 4

#include <stdio.h>

void print_sort(int *arr, int size) //función definición
{
    int i, j, k, temp, mayor = arr[0], menor = arr[0];
    for( i = 1 ; i < size ; i++ )
    {
        if(arr[i] > mayor)
        {
            mayor = arr[i];
        }
        if(arr[i] < menor)
        {
            menor = arr[i];
        }
    }
    printf("Después de ordenar: ");
    for(i = 0; i < size; i++)
    {
        temp = mayor;
        printf("%d ", menor);
        for(k = i + 1; k < size; k++)
        {
            if(arr[i] == arr[k])
            {
                menor = arr[i];
                break;
            }
            for(j = 0; j < size; j++)
            {
                if(arr[j] > menor && arr[j] < temp)
                {
                    temp = arr[j];
                }
            }
            menor = temp;
        }
    }
    printf("\n");
    printf("Valor original de la matriz ");
    for( i = 0 ; i < size ; i++ )
    {
        printf("%d ", arr[i]);
    }
}

int main()
{
    int size, i;
    printf("Ingrese el tamaño de la matriz : ");
    scanf("%d", &size);
    int arr[size];
    printf("Ingrese los %d elementos\n",size);
    for (i = 0; i < size; i++)
    {
        scanf("%d", &arr[i]);
    }
    print_sort(arr, size);
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El código anterior ordena un array de enteros y gestiona duplicados en el array. La función print_sort() recibe dos argumentos, un array y su tamaño. La función luego obtiene el valor más grande y más pequeño en el array para determinar el rango de valores que serán ordenados.

    La función luego recorre el array e imprime los valores ordenados. Sin embargo, para manejar los duplicados, la función primero establece la variable temp en el valor más grande. Luego imprime el valor más pequeño en el array y recorre el array desde el índice actual i+1 para encontrar duplicados. Si se encuentra un duplicado, se asigna a smallest ese duplicado y se rompe el bucle interno. De lo contrario, encuentra el valor más pequeño en el array que es más grande que smallest y más pequeño que temp, y asigna ese valor a smallest.

    Finalmente, la función imprime el array original sin ordenar. La función main() obtiene el tamaño del array y luego obtiene los valores de entrada del usuario. Luego llama a la función print_sort() para ordenar e imprimir el array con duplicados.

Comments are closed.