my bubble sort does not work the way it does

1

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            int q = Convert.ToInt32(Console.ReadLine());
            string arrays = Console.ReadLine();
            string[] arraysint = new string[q];
            arraysint = arrays.Split(' ');
            int[] numbers = Array.ConvertAll(arraysint, int.Parse);
            int i;
            int save = 0;
            int j;
            int temp;
            int current = q - 1;
            int[] maior = new int[1];
            //int[] numbers = new int[q];
            for (j = 0; j < q; j++)
            { 
              for (i = 0; i < current + 1; i++)

                {
                        if (current == 1)
                    {
                        goto final;
                    }
                    if (i == current)
                        {
                      if (current == save)
                        {
                            current--;  
                        }
                        if (current < q - 1)
                        {
                            if (maior[0] == numbers[current] && maior[0] != 0)
                            {
                                current--;
                            }
                        }
                        temp = numbers[current];
                        numbers[save] = temp;
                     numbers[current] = maior[0];
                    current--;
                    }

               if (maior[0] < numbers[i])
                {
                        save = i;
                    maior[0] = numbers[i];       
                }

            }
                maior[0] = 0;
            }
        final:
            Console.Clear();
            for (i = 0; i < q; i++)
            {
                Console.Write(numbers[i] + " ");

            }
            Console.ReadKey();
        }
    }
}

input:

5
5 4 3 2 1  

Output:

1 3 2 4 5

I've done everything, but I can not solve it. Someone help me there?

    
asked by anonymous 08.11.2018 / 00:53

1 answer

2

As our friend @Isac commented, you complicated the logic of bubble sort a lot. I'll drop down a class that does the Bubble Sort sorting, evaluate its operation, and try redoing it by studying each point of the algorithm.

/// <summary>
/// Classe responsável pelas técnicas de ordenação Bubble Sort
/// </summary>
public class BubbleSort
{
    /// <summary>
    /// Ordena um vetor de números inteiros utilizando o algoritmo de Bubble Sort
    /// </summary>
    /// <param name="vetor">Vetor que será ordenado</param>
    /// <returns>Vetor ordenado</returns>
    public static int[] Ordernar(int[] vetor)
    {
        //Variável auxiliar que irá armazenar temporariamente um valor do vetor
        int numeroAuxiliar = 0;
        //Variável para informar se houve alguma troca no algoritmo, caso não houver troca significa que o vetor já está ordenado, então não precisamos continuar o processamento.
        bool trocou = false;

        // i determina o número de etapas para a ordenação
        for (int i = 0; i < vetor.Length - 1; i++) 
        {
            trocou = false;

            // j determina o número de comparações em cada etapa e os índices a serem pesquisados para a comparação. 
            for (int j = 0; j < vetor.Length - (i + 1); j++)
            {
                if (vetor[j] > vetor[j + 1])
                {
                    trocou = true;
                    numeroAuxiliar = vetor[j];
                    vetor[j] = vetor[j + 1];
                    vetor[j + 1] = numeroAuxiliar;
                }
            }

            //Se não houve troca podemos parar a execução do algoritmo de ordenação para evitarmos o processamento desnecessário
            if (!trocou)
                break;
        }

        return vetor;
    }

To call the Bubble Sort method, simply do the following:

//Exemplo da chamada do método de ordenação
int[] vetor = {5, 4, 3, 2, 1};

BubbleSort.Ordernar(vetor);
    
08.11.2018 / 13:22