Professional Documents
Culture Documents
Cátedra Semana 7
Cátedra Semana 7
con un comportamiento
logarítmico
• En el algoritmo de inserción, cada elemento se compara con los elementos contiguos de su izquierda, uno tras otro. Si
el elemento a insertar es el más pequeño, hay que realizar muchas comparaciones antes de colocarlo en su lugar
definitivo.
• El algoritmo de Shell , es similar al algoritmo de inserción, se diferencia en que modifica los saltos contiguos
resultantes de las comparaciones por saltos de mayor tamaño, y con ello se consigue que la ordenación sea más rápida.
Generalmente, se toma como salto inicial n/2 (siendo n el número de elementos), y luego se reduce el salto a la mitad
en cada repetición hasta que sea de tamaño 1. El método Shell es una mejora del método de inserción directa.
Ejemplo Sort Shell:
package ordenamientocomplogaritmico;
import java.util.Scanner;
algoritmo de
boolean cambios;
for (salto = A.length / 2; salto != 0; salto /= 2) {
cambios = true;
while (cambios) { // Mientras se intercambie algún elemento
cambios = false;
for (i = salto; i < A.length; i++) // se da una pasada
QUICKSORT
while(A[i] <= pivote && i < j) i++; // busca elemento mayor que pivote
while(A[j] > pivote) j--; // busca elemento menor que pivote
if (i < j) { // si no se han cruzado
aux= A[i]; // los intercambia
A[i]=A[j];
A[j]=aux;
Con sólo 6 intercambios se ha ordenado el array, }
cuando por inserción se necesitaban muchos más. }
A[izq]=A[j]; // se coloca el pivote en su lugar de forma que tendremos
El rendimiento del método Shell de ordenación es
bastante aceptable, aún para el caso de un
número de elementos muy grande. A[j]=pivote; // los menores a su izquierda y los mayores a su derecha
if(izq < j-1)
Se ha comprobado que el tiempo de ejecución quicksort(A,izq,j-1); // ordenamos subarray izquierdo
promedio es de O(n2/3) para la mayoría de las if(j+1 < der)
secuencias de salto. quicksort(A,j+1,der); // ordenamos subarray derecho
MERGESORT
• El método MergeSort es un algoritmo de ordenación recursivo con un número
de comparaciones entre elementos del array mínimo.
• Su funcionamiento es similar al Quicksort, y está basado en la técnica divide y
vencerás.
• De forma resumida el funcionamiento del método MergeSort es el siguiente:
• Si la longitud del array es menor o igual a 1 entonces ya está ordenado.
• El array a ordenar se divide en dos mitades de tamaño similar.
• Cada mitad se ordena de forma recursiva aplicando el método MergeSort.
• A continuación las dos mitades ya ordenadas se mezclan formando una
secuencia ordenada.
Ejemplo MergeSort :
public static void mergesort(int A[],int izq, int der){
if (izq < der){
int m=(izq+der)/2;
B[i]=A[i];
El método ordena un array A de enteros desde la i=izq; j=m+1; k=izq;
posición izq hasta la posición der. En la primera llamada al while (i<=m && j<=der) //copia el siguiente elemento más grande
método recibirá los valores izq = 0, der = ELEMENTOS-1.
Primero se calcula el elemento central m. A continuación la
primera parte del array, desde izq hasta m y la segunda if (B[i]<=B[j])
parte del array, desde m+1 hasta der, se mezclan
mediante llamadas recursivas al método mergesort. A[k++]=B[i++];
La recursión termina cuando izq == der, es decir, cuando else
un subarray contiene solamente un elemento.
La operación principal de mezcla la realiza el A[k++]=B[j++];
método merge. Este método se puede implementar de while (i<=m) //copia los elementos que quedan de la
varias formas
A[k++]=B[i++]; //primera mitad (si los hay)
Búsqueda Secuencial o de Fuerza Bruta
• La búsqueda lineal o secuencial es el algoritmo de búsqueda más simple.
• Si bien es ciertamente el más simple, definitivamente no es el más común, debido a su ineficiencia.
• Es un algoritmo de fuerza bruta.
• Muy raramente se usa en producción, y en la mayoría de los casos, es superado por otros algoritmos.
• La búsqueda lineal no tiene requisitos previos para el estado de la estructura de datos subyacente.
Explicación
Relájate
• La búsqueda lineal implica la búsqueda secuencial de un elemento en la estructura de datos dada hasta que se encuentra el
elemento o se llega al final de la estructura.
• Si se encuentra el elemento, generalmente devolvemos su posición en la estructura de datos. Si no, normalmente
devolvemos un -1 u otro valor nulo
Este código es parte del main….
Código int[ ] miArreglo4={89,57,91,47,953,27,22,67,99};
Impresion(miArreglo4);
Búsqueda }