Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como resolver este algoritmo de uma forma pratica?

Olá!

Estava tentando resolver um problema que eu mesmo resolvi me desafiar e estou com um problema e este problema é o seguinte:

Gostaria de escrever três números inteiros distintos e após escreve-los queria comparar eles e colocar eles em ordem crescente em seguida. Consegui fazer uma parte, porém me deparei que teria que comparar caso a caso com IF e ELSE, tentei passar para o SWITCH, porém não resolveu muita coisa...

Gostaria de saber se existiria outra forma, outra maneira de pensar para resolver este algoritmo (se possível com IF, ELSE e SWITCH.) , estou há vários dias tentando fazer e não consegui fazer se alguém puder me ajudar, agradeço desde já.

Obrigado!

1 resposta
solução!

Olá, Jocy, normalmente fazemos isso com a ajuda do LINQ (Consultas Integradas à Linguagem) utilizando o método Sort:

https://dotnetfiddle.net/hWTQXP

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var numeros = new List<int> {3, 9, 5, 2, 8};
        numeros.Sort();

        foreach(var n in numeros)
        {
            Console.WriteLine(n);
        }        
    }
}

Mas quando estamos aprendendo algoritmos, é importante entender o processo "manual" de ordenação. Existem várias técnicas, e uma delas é chamada de bubble sort (ordenação por bolha, pois os números mais altos vão "descendo" e os menores vão "subindo", como aquelas bolhas que são mais leves e por isso vão subindo num copo de refrigerante).

https://code.msdn.microsoft.com/windowsdesktop/Bubble-Sort-C-8d3aec6f

Para ver esse código rodando, entre em:

https://dotnetfiddle.net/YZRQZ6

using System;

public class Program
{
    public static void Main()
    {
            int[] numbers = { 45, 81, 29, 66, 03, 52, 51, 55, 74 }; 

            Console.WriteLine("Example Bubble Sort"); 

            bubbleSort(numbers, numbers.Length); 

            for (int i = 0; i < numbers.Length; i++) 
                Console.WriteLine(numbers[i]); 

            Console.ReadLine(); 
    }

    static void bubbleSort(int[] arr, int length) 
    { 
        int repos = 0; 
        /*Irá percorrer o vetor, comparando cada elemento do vetor com o elemento 
         * imediatamente seguinte (arr[j] = arr[j + 1];) 
         * O numero maximo de execuções do trecho do algoritmo 
         * p/ que o vetor fique ordenado é de N - 1, onde N é o numero de vezes.*/ 

        /* Will go through the vector, comparing each element of the array with the element 
         * immediately following (arr[j] = arr[j + 1];) 
         * The maximum number of implementation of the algorithm for the vector section be  
         * ordained is N - 1, where N is the number of times.  
         */ 

        // i determina o número de etapas para a ordenação 
        // i determines the number of steps for sorting 
        for (int i = 0; i < length - 1; i++) 
        { 
            // j determina o numero de comparações em cada etapa e os indices a serem 
            //pesquisados para a comparação. 
            // j determines the number of comparisons in each step and the indices to be 
            // studied for comparison 
            for (int j = 0; j < length - (i + 1); j++) 
            {  
                if (arr[j] > arr[j + 1]) 
                { 
                    repos = arr[j]; 
                    arr[j] = arr[j + 1]; 
                    arr[j + 1] = repos; 
                } 
            } 
        } 
    }     
}

Existem outras implementação de bubble sort que utilizam recursividade, mas essa acima é mais simples.