Artículo perteneciente a la sección de algoritmos
Este artículo es una evolución del algoritmo de ordenación por burbuja
Hola a todos,
Hace poco os explique el algoritmo de ordenación por burbuja y el de ordenación por burbuja bidireccional. Pese a que este segundo es una evolución un poco mejor que el original, el problema de que usa demasiada memoria sigue ocurriendo.
En las arquitecturas hardware (tantos las actuales, como las antiguas, y seguramente también las futuras) lo que más limita la velocidad de ejecución de un programa es el acceso a memoria. Si nuestro algoritmo usa de forma intensiva la memoria lo más normal es que su rendimiento sea bajo.
Con esta premisa nació el algoritmo de ordenación por selección. La idea es simple. Busco el elemento más pequeño de la lista, y lo intercambio con el elemento de la primera posición... busco el segundo elemento más pequeño y lo intercambio con el elemento de la segunda posición. Con esto se hace más o menos el mismo número de comparaciones que se hacen con el algoritmo de burbuja tradicional, pero con muchos menos movimientos de memoria, y por lo tanto con un rendimiento claramente superior.
Un ejemplo de código de este algoritmo sería el siguiente:
void LPVector::SelectionSort(void)
{
int i,j,indmin=0;
float min = v[0];
for ( i = 0 ; i < (n-1) ; ++i)
{
indmin = i;
min = v[i];
for( j = i+1 ; j < n ; ++j)
{
if(v[j] < min )
{
indmin = j;
min = v[j];
}
}
v[indmin] = v[i];
v[i] = min;
}
}
No podemos decir que sea un algoritmo eficiente (su coste depende de forma cuadrática con la longitud del vector), pero si que podemos asegurar que solo hará tantos movimientos de memoria como elementos haya en el vector, y esto ya es una clara mejora.
En breve haré una lista comparativa con los costes de cada algoritmo en diferentes situaciones para que os hagáis una idea.
Espero que os sirva de referencia
Nos vemos
Blog de programación enfocado a estudiantes principiantes de C/C++ en español. Dispone de cursos de todos los niveles y para multitud de usos.
Entradas populares
-
Una pregunta que me hacen en muchas ocasiones es ¿¿qué significa %2?? La respuesta tiene dos acepciones en función de si lo estamos u...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, ASCII Art es el hecho de hacer di...
-
Articulo perteneciente a : Referencias de programación Hola a todos Os pongo una aportación que a más de uno le irá bien, un resumen de ...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, El ejercicio de hoy se basa en c...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> El c apitulo de hoy trata sobre las instrucc...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos... Un compañero vuestro ha...
-
Capítulo perteneciente al tutorial de opengl desde cero Hola a todos, Antes que nada quiero que tengáis en cuenta que gran parte de lo q...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos, Este tutorial intenta ser e...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Bienvenidos a un nuevo capitulo del curso ...
-
Capítulo perteneciente al tutorial de opengl desde cero Hola a todos, Este capítulo tal vez es de lo más complicados de la teoría necesa...
0 comentarios :
Publicar un comentario