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