Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Código C++:
int searchlin(int n, int a[], int x)
{ int i = 0;
while( i<n && a[i]! = x)
i++;
return (i == n)? (–1) : (i);// – 1 indica fracaso
}
1. Ordenación burbuja.
2. Ordenación por inserción directa.
3. Ordenación por selección directa.
4. Ordenación por Shell.
5. Ordenación por quicksort.
Burbuja(n , X[ ])
Begin Este método mejora la velocidad de
for i0 to n-1 do ejecución del algoritmo. Obsérvese que en
for j0 to n-i do el primer recorrido del vector (cuando el
if X[j]>X[j+1] then i=0), el valor mayor del vector se mueve al
ultimo elemento X[n].`por consiguiente no
auxX[j]
es necesario comparar X[n-1] y X[n]. En
X[j]X[j+1] otras palabras, el limite superior del bucle
X[j+1]aux for puede ser n-2. después de cada paso se
end if puede decrementar en uno el limite superior
end for del bucle for.
end for
End // fin de burbuja
14 27
A: 27 14 95 38 12 10 47
0 1 2 3 4 5 6
A: 14 27 95 38 12 10 47
A: 14 27 95 38 12 10 47
0 1 2 3 4 5 6
Tercera pasada:
A[3] < A[2] ( 38 < 95 ) Si hay intercambio
A[2] < A[1] ( 38 < 27 ) No hay intercambio
38 95
A: 14 27 95 38 12 10 47
0 1 2 3 4 5 6
14 27 38
12 12 12 12 95
A: 14 27 38 95 12 10 47
0 1 2 3 4 5 6
12 14 27 38
10 10 10 10 10 95
A: 12 14 27 38 95 10 47
0 1 2 3 4 5 6
47 95
A: 10 12 14 27 38 95 47
0 1 2 3 4 5 6
A: 10 12 14 27 38 47 95
Menor = A[0] = 27
Menor < A[1] ( 27 < 14 ) No, entonces Menor = A[1] = 14
Menor < A[2] ( 14 < 95 ) Si
Menor < A[3] ( 14 < 38 ) Si
Menor < A[4] ( 14 < 12 ) No, entonces Menor = A[4] = 12
Menor < A[5] ( 12 < 10 ) No, entonces Menor = A[5] = 10
Menor < A[6] ( 10 < 47 ) Si
A: 10 14 95 38 12 27 47
Segunda pasada
Menor = A[1] = 14
Menor < A[2] ( 14 < 95 ) Si
Menor < A[3] ( 14 < 38 ) Si
Menor < A[4] ( 14 < 12 ) No, entonces Menor = A[4] = 12
Menor < A[5] ( 12 < 27 ) Si
Menor < A[6] ( 12 < 47 ) Si
A: 10 12 95 38 14 27 47
Tercera pasada
Menor = A[2] = 95
Menor < A[3] ( 95 < 38 ) No, entonces Menor = A[3] = 38
Menor < A[4] ( 38 < 14 ) No, entonces Menor = A[4] = 14
Menor < A[5] ( 14 < 27 ) Si
Menor < A[6] ( 14 < 47 ) Si
A: 10 12 14 38 95 27 47
Cuarta pasada
Menor = A[3] = 38
Menor < A[4] ( 38 < 95 ) Si
Menor < A[5] ( 38 < 27 ) No, Menor = A[5] = 27
Menor < A[6] ( 27 < 47 ) Si
A: 10 12 14 27 95 38 47
Quinta pasada
Menor = A[4] = 95
Menor < A[5] ( 95 < 38 ) No, Menor = A[5] = 38
Menor < A[6] ( 38 < 47 ) Si
A: 10 12 14 27 38 95 47
Sexta pasada
Menor = A[5] = 95
Menor < A[6] ( 95 < 47 ) No, Menor = A[6] 95
A: 10 12 14 27 38 47 95
Seleccion (n , X [ ])
for i 0 to n-1 do
menor X[i] //selección inicial
k i
for j i+1 to n do //buscar en secuencia
if X[j] < menor then
menor X [j] //selección
Kj
end for
X [k] X[i]//intercambio
X [i] menor
end for
End Seleccion
Sea el array 4, 12, 16, 24, 36, 3. (“Tomado de la referencia Nro. 2”)
El método de inserción directa los saltos se hacen de una posición en una posición y
serán necesario cinco comparaciones. En el método de shell, si los saltos son de dos
posiciones, se realizan tres comparaciones.
A: 6, 1, 5, 2, 3, 4, 0
1 3 2, 1, 4, 0, 3, 5, 6 (6,0)(5,4)(6,2)
2 3 0, 1, 4, 2, 3, 5, 6 (2,0)
3 3 0, 1, 4, 2, 3, 5, 6 ninguno
4 1 0, 1, 2, 3, 4, 5, 6 (4,2)(4,3)
5 1 0, 1, 2, 3, 4, 5, 6 ORDENADO
Primera pasada
Salto = n div 2 = 10 div 2 = 5
10 8 2 27 95 12
A: 27 14 95 38 12 10 47 8 56 2
A: 10 14 8 38 2 27 47 95 56 12
A: 8 14 2 27 10 38 47 12 56 95
X[1] X[2]
… X[i]
… X[n]
A: 27 16 95 14 12 10 47 8
Primera pasada
A: 27 16 95 14 12 10 47 8
A: 8 16 95 14 12 10 47 27
A: 8 16 95 14 12 10 47 27
A: 8 10 95 14 12 16 47 27
A: 8 10 95 14 12 16 47 27
A: 8 10 12 14 95 16 47 27
Partición_o_quicksort
{ elegir en X un valor arbitrario del vector: A[i]
while(división o partición no este terminada) do
Recorrer el vector de izquierdo a derecha para valores >=X[i]
Recorrer el vector de derecha a izquierda para valores <= X[i]
if (los valores encontrados no están ordenados) then
Intercambiar los dos valores
endif
end while
}
if i <= j then
Intercambiar(A[i], A[j])
i i+1
j j-1
End if
End while
If L < j then
Partición_o_quicksort(L,j,a)
If i < R
Partición_o_quicksort(i,R,a)
End Partición_o_quicksort
A: 27 14 95 38 12 10 47 8
Pivote = A[0] = 27
Primera pasada
Recorrido de derecha a izquierda
A[7] Pivote ( 8 >= 27 ) si hay intercambio
8 27
A: 27 14 95 38 12 10 47 8
0 1 2 3 4 5 6 7
27 95
A: 8 14 95 38 12 10 47 27
0 1 2 3 4 5 6 7
10 27
A: 8 14 27 38 12 10 47 95
0 1 2 3 4 5 6 7
A: 8 14 10 12 27 38 47 95
ERL/2020