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.
- Os dejo un enlace al pseudocódigo y a información más detallada sobre este algoritmo: https://es.wikipedia.org/wiki/Heapsort
- 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