Sunteți pe pagina 1din 16

Algoritmos de

búsqueda y ordenación
Programación 2018-2019
Grados en Ingeniería Telemática,
Ingeniería de Sistemas de Comunicaciones
Algoritmo de búsqueda

• Cualquier algoritmo que resuelve el problema de


búsqueda, es decir, recuperar información
almacenada dentro de alguna estructura de
datos, por ejemplo en un array.

• La información pude ser un valor primitivo o un


objeto. Por ejemplo, encontrar un valor x en un
array de enteros.
Algoritmo de búsqueda en
arrays

• Búsqueda lineal

• Búsqueda binaria
Búsqueda lineal
• NO requiere que el array de entrada sea ordenado.

• Buscar el elemento x de manera secuencial, es


decir comparar el valor de x con todos los
elementos del array, empezando por el primero.

• El algoritmo necesitará un numero de pasos, en el


caso peor, igual al número de elementos. Este
algoritmo tiene una complejidad computacional
lineal con respecto al número de elementos del
array
Código búsqueda lineal

public static int linealSearch(int a[], int val){


for (int i = 0; i < a.length; i++) {
if(a[i] == val){
return i;
}
}
return -1;
}
Búsqueda binaria
• Requiere que el array de entrada sea ordenado.

• Utiliza la técnica del divide y vencerás (divide et impera): dividir el espacio de las
soluciones del problema en dos, y descartar una parte.

• El algoritmo, en cada paso, compara el valor de x con el elemento cuyo indice m es


el medio del array:

1. Si son iguales, se ha encontrado el indice del elemento en el array

2. Si x es menor del valor del elemento en posición m, el algoritmo seguirá


buscando en el sub-array del primer elemento hasta m

3. Si x es mayor del valor del elemento en posición m, el algoritmo seguirá


buscando en el sub-array de m hasta el elemento final

• En cada paso se divide el espacio de búsqueda en dos. Por tanto el algoritmo


necesitará un numero de pasos del orden del logaritmo en base 2 del número de
elementos del array.
Código búsqueda binaria
public static int binarySearch(int a[], int val){
int start = 0;
int end = a.length - 1;
int m;
while(start <= end){
m = (start+end) / 2;
if(a[m] == val){
return m;
}else if(a[m] > val){
end = m-1;
}else{
start = m+1;
}
}
return -1;
}
Ejemplo: buscar el número 82
start = 0
10 22 45 67 71 75 82 98 end = 7
m = (0+7) / 2 = 3
67 es menor que 82, sigo buscando en el sub array derecho

start = 4
end = 7
10 22 45 67 71 75 82 98 m = (4+7) / 2 = 5

75 es menor que 82, sigo buscando en el sub array derecho

start = 6
10 22 45 67 71 75 82 98 end = 7
m = (6+7) / 2 = 6
82 es igual a 82, el elemento se encuentra en posición 6
Algoritmo de ordenación
• Cualquier algoritmo que pone los elementos de
una lista en un cierto orden.

• Un algoritmo de ordenación eficiente (menos


tiempo) es importante para optimizar la
eficiencia de otros algoritmos que requieren que
los datos de entrada estén ya ordenados

• https://visualgo.net/sorting

Programación 2018-2019
Ordenación de arrays: bubblesort
(ordenación de burbuja)

• Compara cada elemento en un array con el


elemento cercano y los intercambia si el valor
del primer elemento es mayor que el segundo

Programación 2018-2019
Pseudocódigo bubblesort

HACER
swapped = false
PARA i DESDE 1 HASTA indexOfLastUnsortedElement
SI leftElement > rightElement
swap(leftElement, rightElement)
swapped = true
MIENTRAS swapped

Programación 2018-2019
Código bubblesort
public static void bubbleSort(int a[]){
boolean swap = false;
int j = a.length-1;
do {
swap = false;
for(int i = 0; i < j ; i++){
if(a[i] > a[i+1]){
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
swap = true;
}
}
j--;
} while(swap);
}
Ordenación de arrays:
selection sort (ordenación por selección)

• Recorrer todo el array para encontrar el mínimo


e intercambiarlo con el primer elemento del
array. Luego, buscar el mínimo en el array
menos el primer elemento e intercambiarlo con
el segundo elemento. Sigue así hasta el
penúltimo elemento del array.

Programación 2018-2019
Pseudocódigo selectionsort

PARA i DESDE 1 HASTA longitud - 1


Declara el elemento i como el mínimo
PARA CADA elemento no ordenado
SI elemento < mínimo
Declara elemento como nuevo mínimo
Intercambia el mínimo con la primera posición i

Programación 2018-2019
Código selectionsort
public static void selectionSort(int a[]){
for (int i = 0; i < a.length-1; i++) {
int min = i;
for (int j = i+1; j < a.length; j++) {
if(a[j] < a[min]) min = j;
}
if(min != i){
int tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
}
}
Otros algoritmos de
ordenación

• Insertion sort

• Merge sort

• Quick sort

Programación 2018-2019

S-ar putea să vă placă și