Pop

Algoritmos de ordenación en c# - Algoritmo HeapShort

4. Algoritmo HeapSort

  •  En este capítulo del curso de programación en c# con visual studio 2017 vamos a continuar viendo algunos algoritmos de ordenación de vectores o arrays. En esta ocasión veremos el algoritmo de ordenación HeapSort.
  •  Este algoritmo consiste en almacenar todos los elementos del vector a ordenar en un montículo y posteriormente  extraer el nodo que queda como nodo raíz del montículo en sucesivas iteraciones obteniendo el conjunto ordenado.
  • Una vez visto esto ya podemos ver el vídeo con la explicación:

  • Os dejo el código visto en el vídeo:
   public static void  HeapSort()
        {
            
                int[] array = { 50, 17, 72, 12, 23, 54, 76 };
                mostrar(array);
                Console.WriteLine("");
                HeapSort(array);
                Console.ReadLine();
                mostrar(array);
                Console.ReadLine();
            
        }


        static private void HeapSort(int[] array)
        {
           
            int tamanioArray = array.Length;
            for (int p = (tamanioArray - 1) / 2; p >= 0; p--)
                Maximos(array, tamanioArray, p);

            for (int i = array.Length - 1; i > 0; i--)
            {
                int temp = array[i];
                array[i] = array[0];
                array[0] = temp;

                tamanioArray--;
                Maximos(array, tamanioArray, 0);
                Console.WriteLine("");
                mostrar(array);
            }
          
        }

        private static void Maximos(int[] array, int tamanyo, int posicion)
        {
            int izquierda = (posicion + 1) * 2 - 1;
            int derecha = (posicion + 1) * 2;
            int mayor = 0;

            if (izquierda < tamanyo && array[izquierda] > array[posicion])
                mayor = izquierda;
            else
                mayor = posicion;

            if (derecha < tamanyo && array[derecha] > array[mayor])
                mayor = derecha;

            if (mayor != posicion)
            {
                int temp = array[posicion];
                array[posicion] = array[mayor];
                array[mayor] = temp;

                Maximos(array, tamanyo, mayor);
            }
        }

No hay comentarios:

Publicar un comentario

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...