Академический Документы
Профессиональный Документы
Культура Документы
Estructura de Datos
Tema:
Integrantes:
Armas Sumaran Percy
Edwards Castro Alonso.
Gariza Campos Carlos.
Guzmn Mndez Leonardo.
Ciclo:
II
Ao:
2015
Trujillo Per
Algoritmo de ordenacin.
1.3.- Un ejemplo:
Te acuerdas de nuestra famosa lista?
4-3-5-2-1
temp toma el valor del segundo elemento, 3. La primera carta es el 4. Ahora
comparamos: 3 es menor que 4. Luego desplazamos el 4 una posicin a la derecha y
despus copiamos el 3 en su lugar.
4-4-5-2-1
3-4-5-2-1
El siguiente elemento es 5. Comparamos con 4. Es mayor que 4, as que no ocurren
intercambios.
Continuamos con el 2. Es menor que cinco: desplazamos el 5 una posicin a la
derecha:
3-4-5-5-1
Comparamos con 4: es menor, as que desplazamos el 4 una posicin a la derecha:
3-4-4-5-1
Comparamos con 3. Desplazamos el 3 una posicin a la derecha:
3-3-4-5-1
Finalmente copiamos el 2 en su posicin final:
2-3-4-5-1
El ltimo elemento a ordenar es el 1. Cinco es menor que 1, as que lo desplazamos
una posicin a la derecha:
2-3-4-5-5
Continuando con el procedimiento la lista va quedando as:
2-3-4-4-5
2-3-3-4-5
2-2-3-4-5
1 - 2 - 3 - 4 - 5.
1.4.- Pseudocdigo:
^
Tabla de variables
Nombre Tipo
Uso
Tabla de variables
Nombre Tipo
Uso
TAM
i
j
temp
Tamao de la lista
Contador
Contador
Para realizar los intercambios
Constante Entera
Entero
Entero
El mismo que los elementos de la lista
Por ejemplo: Slo ser necesario entrelazar cada lista una vez que estn
ordenadas.
2.3.- Ejemplo:
Mtodo
estable
de
I1
KK+1
J 1
II+1
K 1
Mientras (I < longitud A) y (j <
longitud B)
hacer
Si A[ I ] < B[ J ] entonces
C[ K ] A[ I ]
KK+1
II+1
de lo contrario
C[ K ] B[ J ]
tmp = izq;
nroelem=der-izq+1;
while ((izq <= final izq) && (centro <= der))
{
if (A[izq] < A[centro])
{
B[tmp]=A[izq];
izq++;}
else
{
B[tmp]=A[centro];
centro++;
}
tmp++;
}
while (izq <= final izq)
{
B[tmp]=A[izq];
tmp++;
izq++;
}
while (centro <= der)
{
B[tmp]=A[centro];
tmp++;
centro++;
}
for(int i=1;i<=nroelem;i++)
{
A[der]=B[der];
der- -;
}
}
2. Testeo: si izq > der (que significa izq = der + 1) hemos particionado exitosamente la
entrada.
3. Cambio: si izq < der intercambiar A[izq] con A[der]. Luego de hacer esto A[izq] tiene
una clave menor que el pivote y A[der] tiene una clave al menos igual al pivote de
modo que sabemos que en la siguiente bsqueda izq se va a mover al menos una
posicin a la derecha y der se va a mover al menos una posicin a la izquierda.
int particion (int A[],int i,int j,int pivote)
{
int izq,der;
izq=i;
der=j;
do
{
intercambio(A,izq,der);
while(A[izq] < pivote) izq++;
while(A[der] >= pivote) der- -;
}
while (izq <= der);
return izq;
}
El intercambio inicial no interesa ya que no asumimos ningn orden en la entrada al
comienzo del programa.
El programa final es el siguiente:
Void sort rapido (int A[], int i, int j)
{
int pivote,indice,k;
indice=hallo pivote(A,i,j);
if (indice! =0)
{
pivote=A[indice];
k=particion(A,i,j,pivote);
sort rapido(A,i,k-1);
sort rapido(A,k,j);
}
}
Tiempo de quicksort:
El tiempo de hallo pivote es O(j i+ 1) y en muchos casos ms pequeo. La llamada a
particin lleva tiempo O(ji+1), entonces el tiempo de cada llamada individual a
quicksort tiene tiempo proporcional al nmero de elementos.
Dicho de otra forma, el tiempo total que toma quicksort es la suma sobre todos los
elementos de la cantidad de veces que el elemento es parte de un sub-array para el
cual una llamada recursiva se realizo.
En el peor caso, el pivote coincide con el elemento mayor del array, esto divide el array
en uno de n-1 elementos y el otro de 1. El elemento ri forma parte de n i + 1
llamadas luego el tiempo est dado por:
n i=1 (n i + 1) = n i=1n n i=1i + n i=11 = n 2 n(n + 1)/2 + n =
2n 2/2 n 2/2 n/2 + n = n 2/2 + n/2
2. Algoritmos de Bsqueda.
2.1. Bsqueda lineal recursiva.
La bsqueda lineal compara los elementos del array con la clave de bsqueda hasta
que encuentra el elemento o bien hasta que se determina que no se encuentra.
int busqueda lineal (int A[], int clave, int n, int i)
{
if (i==n+1) return -1;
elseif (A[i]==clave) return i;
else return busqueda lineal(A,clave,n,i+1);
return -1;
}
La funcin se invoca inicialmente con: bsqueda lineal(A, n, 1).