Está en la página 1de 3

Tema 7: Algoritmos de búsqueda,

ordenación y mezcla.
7.1 Búsqueda
Consiste en comprobar si un determinado elemento esta o no en el vector y encontrar que
posición ocupa.
Existen la búsqueda en listas sin ordenar y búsqueda en listas ordenadas

Búsqueda secuencia SIMPLE

Es absurdo utilizar un bucle for pues obliga a hacer todas las comparaciones. Por ello, lo mas
recomendable es utilizar el bucle do while.

int encontrado = 0 ; //Suponemos que el elemento no está en el vector


int i = 0 ; //Elemento del vector que analizo
int n = 8 ; //Elemento que busco
do{
if (vector[i] == n){
encontrado=1;
}
else{
i++;
}
}while (encontrado==0 && i<TAM);
if (encontrado == 1){
printf(“El número está en la posición %i”, i); //Da la posición real en el vector, si queremos
se puede cambiar a (i+1) para mejor orientación del lector.
}
else{
printf(“El número no está en el vector”);
}

Búsqueda secuencia BINARIA

Se trata de la búsqueda más e ciente en listas ordenadas.

int dato = 8 ;
int vector[TAM] ;
int izquierda, derecha, medio ;
int encontrado = 0 ;
izquierda = 0 ;
derecha = TAM - 1 ;
medio= (izquierda + derecha) / 2 ;
do{
if (vector[medio] == dato){
encontrado=1;
}
else{
if(vector[medio] > dato){
derecha = medio - 1 ;
}
else{
izquierda = medio + 1 ;
}
fi
}
}while (encontrado==0 && izquierda<derecha);
if (encontrado == 1){
printf(“El número está en la posición %i”, i); //Da la posición real en el vector, si queremos
se puede cambiar a (i+1) para mejor orientación del lector.
}
else{
printf(“El número no está en el vector”);
}

7.2 Métodos de ordenación


Algoritmo de intercambio o de la burbuja

//durante N-1 interacciones, siendo N el número de elementos del vector.


//está ordenado de menor a mayor.
int i, j; // i= interacciones, j=elementos.
int aux;
for(i=1; i< N; i++){
for (j=0; j<N-i; j++){
if(vector[ j ]>vector[j+1]){ //seria < si lo queremos cambiar de mayor a menor.
aux= vector[ j ];
vector[ j ]=vector[j+1];
vector[j+1]=aux;
}
}
}

Para ordenar un dato concreto de un struct:

struct tipoAlumno aux; // se introduce el auxiliar como un struct y no como una variable.
If (listadoM31[ i ].notaMedia>listadoM31[i+1].notaMedia){
aux=listadoM31[ i ];
listadoM31[ i ]=listadoM31[i+1];
listadoM31[i+1]=aux;
}

Algoritmo de selección directa

Consiste en localizar los elementos mayores o menores de uno en uno para ir ordenándolos.

int i, j; // i= interacciones, j=posicion.


int aux;
for(i=1; i<N; i++){
min=vector[ i ];
jmin= i ;
for (j=i+1; j<=N-i; j++){
if(vector[ j ]<min){
min= vector[ i ];
jmin= j ;
}
}
vector[ jmin ]= vector[ i ];
vector[ i ]= min;
}
7.2 Mezcla
const int T1=100, T2=50; // tama os de los vectores
int vector1[T1],vector2[T2],vector3[T1+T2];
//dos listas ordenadas(a y b)y una lista a la que copiarlas.
// ndices para recorrer cada lista, y un auxiliar:
int i1 , i2 , i , k ;
i1=0; i2=0; i=0;
while((i1<T1)&&(i2<T2)){
if (vector1[i1]<vector2[i2]){
vector3[i]= vector1[i1];
i1 = i1+1;
}
else{
vector3[i]= vector2[i];
i2=i2+1;
}
i=i+1;
}
//Terminamos de copiar la sublista mas larga
if (i1<T1){
// El vector1 no se ha copiado entero, copio lo que falta
for (k=i1; k<T1; k++){
vector3[i] = vector1[k];
i=i+1;
}
}
else{
//El vector2 no se ha copiado entero, copio lo que falta
for (k=i2; k<T2; k++){
vector3[i] = vector2[k];
i=i+1;
}

También podría gustarte