Búsqueda y Ordenamiento
unknown
c_cpp
a year ago
2.4 kB
24
Indexable
#include <iostream>
using namespace std;
int busquedaLineal(int [], int, int);
int busquedaBinaria(int [], int, int);
int ordenBurbuja(int [], int);
int main() {
const int NUMEL = 10;
int nums[NUMEL] = {22,5,67,98,45,32,101,99,73,10};
int elemento, ubicacion, movimientos;
movimientos = ordenBurbuja(nums, NUMEL);
cout << "La lista ordenada, en orden ascendente, es: " << endl;
for (int i = 0; i < NUMEL; ++i)
cout << " " <<nums[i]; // 5 10 22 32 45 67 73 98 99 101
cout << endl << "Se hicieron " << movimientos
<< " movimientos para ordenar esta lista" << endl;
cout << "Introduzca el elemento que esta buscando: ";
cin >> elemento;
ubicacion = busquedaLineal(nums, NUMEL, elemento);
if (ubicacion > -1)
cout << "El elemento fue encontrado en la posicion con indice "
<< ubicacion << endl;
else
cout << "El elemento no se encontro en la lista" << endl;
ubicacion = busquedaBinaria(nums, NUMEL, elemento);
if (ubicacion > -1)
cout << "El elemento fue encontrado en la posicion con indice "
<< ubicacion << endl;
else
cout << "El elemento no se encontro en la lista" << endl;
return 0;
}
// esta funcion devuelve la ubicacion de clave en la lista
// se devuelve un -1 si no se encuentra el valor
int busquedaLineal(int lista[], int tamanio, int clave) {
for (int i = 0; i < tamanio; i++) {
if (lista[i] == clave)
return i;
}
return -1;
}
// esta funcionn devuelve la ubicacionn de clave en la lista
// se devuelve un -1 si no se encuentra el valor
int busquedaBinaria(int lista[], int tamanio, int clave) {
int izquierdo = 0, derecho, puntomedio;
derecho = tamanio -1;
while (izquierdo <= derecho) {
puntomedio = (int) ((izquierdo + derecho) / 2);
if (clave == lista[puntomedio])
return puntomedio;
else if (clave > lista[puntomedio])
izquierdo = puntomedio + 1;
else
derecho = puntomedio - 1;
}
return -1;
}
// esta funcion organiza de menor a mayor la lista
// devuelve la cantidad de cambios realizados para ordenar.
int ordenBurbuja(int num[], int numel) {
int temp, movimientos = 0;
for (int i = 0; i < (numel - 1); i++) {
for(int j = 1; j < numel; j++) {
if (num[j] < num[j-1]) {
temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
movimientos++;
}
}
}
return movimientos;
}Editor is loading...
Leave a Comment