Implementación de Algoritmos C++: Búsqueda Binaria, Shell Sort y Más
Clasificado en Informática
Escrito el en español con un tamaño de 8,06 KB
Búsqueda Binaria (Binary Search)
Implementación del algoritmo de búsqueda binaria en C++ para encontrar un elemento en un arreglo ordenado.
#include <iostream>
#include <conio.h> // Para clrscr() y getch() (no estándar)
using namespace std;
int main() {
// clrscr(); // Limpia la pantalla (dependiente de conio.h)
int a[50], n, dato;
cout << "Ingrese el tamaño del arreglo (max 50): ";
cin >> n;
cout << "Ingrese los elementos del arreglo (en orden ascendente):" << endl;
for (int i = 0; i < n; i++) {
cout << "Elemento[" << i << "]: ";
cin >> a[i];
}
cout << "Ingrese el número a buscar: ";
cin >> dato;
int primero = 0;
int ultimo = n - 1;
int c;
bool band = false; // Bandera para indicar si se encontró el dato
while (primero <= ultimo) {
c = (primero + ultimo) / 2;
if (dato == a[c]) {
cout << "\nValor encontrado en la posición: " << c << endl;
band = true;
break; // Salir del bucle una vez encontrado
} else if (dato > a[c]) {
primero = c + 1;
} else { // dato < a[c]
ultimo = c - 1;
}
}
if (!band) { // Si la bandera sigue en false
cout << "\nValor no encontrado en el arreglo." << endl;
}
getch(); // Espera a que se presione una tecla (dependiente de conio.h)
return 0;
}
Ordenamiento Shell (Shell Sort)
Implementación del algoritmo de ordenamiento Shell en C++.
#include <iostream>
#include <conio.h> // Para clrscr() y getch() (no estándar)
using namespace std;
int main() {
// clrscr(); // Limpia la pantalla (dependiente de conio.h)
int v[50], n, aux;
cout << "Ingrese tamaño del vector (max 50): ";
cin >> n;
cout << "Ingrese los elementos del vector:" << endl;
for (int i = 0; i < n; i++) {
cout << "Elemento[" << i << "]: ";
cin >> v[i];
}
int inter = n / 2; // Intervalo inicial
while (inter > 0) {
for (int i = inter; i < n; i++) {
int j = i - inter;
while (j >= 0) {
int k = j + inter;
if (v[j] <= v[k]) { // Si ya están en orden
j = -1; // Salir del while interno
} else { // Intercambiar
aux = v[j];
v[j] = v[k];
v[k] = aux;
j = j - inter; // Moverse al anterior elemento del subgrupo
}
}
}
// Opcional: Mostrar proceso en cada intervalo
/*
cout << "\nProceso (intervalo " << inter << "): ";
for (int l = 0; l < n; l++) {
cout << v[l] << " ; ";
}
cout << endl;
*/
inter = inter / 2; // Reducir el intervalo
}
cout << "\nResultado final (vector ordenado):" << endl;
for (int i = 0; i < n; i++) {
cout << v[i] << " ; ";
}
cout << endl;
getch(); // Espera a que se presione una tecla (dependiente de conio.h)
return 0;
}
Generación de Números Aleatorios
Genera una secuencia de números pseudoaleatorios en C++.
#include <iostream>
#include <stdlib.h> // Para rand() y srand()
#include <time.h> // Para time()
#include <conio.h> // Para clrscr() y getch() (no estándar)
using namespace std;
int main() {
// clrscr(); // Limpia la pantalla (dependiente de conio.h)
int n, i;
cout << "Ingrese la cantidad de números aleatorios a generar: ";
cin >> n;
// Inicializar la semilla del generador de números aleatorios
srand(time(NULL));
cout << "\nNúmeros generados (entre 0 y 99):" << endl;
for (i = 0; i < n; i++) {
cout << rand() % 100 << " "; // Genera números entre 0 y 99
}
cout << endl;
getch(); // Espera a que se presione una tecla (dependiente de conio.h)
return 0;
}
Vector Aleatorio y Ordenamiento Burbuja
Crea un vector con números aleatorios y lo ordena usando el método de la burbuja.
#include <iostream>
#include <stdlib.h> // Para rand() y srand()
#include <time.h> // Para time()
#include <conio.h> // Para clrscr() y getch() (no estándar)
using namespace std;
int main() {
// clrscr(); // Limpia la pantalla (dependiente de conio.h)
int n, v[100], aux;
cout << "Ingrese tamaño del vector (max 100): ";
cin >> n;
// Inicializar la semilla
srand(time(NULL));
cout << "\nVector original (aleatorio):" << endl;
for (int i = 0; i < n; i++) {
v[i] = rand() % 100; // Números aleatorios entre 0 y 99
cout << v[i] << " ";
}
cout << endl;
// Algoritmo de Ordenamiento Burbuja
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (v[j] > v[j + 1]) {
// Intercambiar elementos
aux = v[j + 1];
v[j + 1] = v[j];
v[j] = aux;
}
}
}
cout << "\nVector ordenado por Burbuja:" << endl;
for (int k = 0; k < n; k++) {
cout << v[k] << " ";
}
cout << endl;
getch(); // Espera a que se presione una tecla (dependiente de conio.h)
return 0;
}
Ordenamiento Shell e Inserción de Elemento
Ordena un vector usando Shell Sort y luego inserta un nuevo elemento manteniendo el orden.
#include <iostream>
#include <conio.h> // Para clrscr() y getch() (no estándar)
using namespace std;
int main() {
// clrscr(); // Limpia la pantalla (dependiente de conio.h)
int v[51], n, aux, nuevoElemento;
// Se declara v[51] para permitir la inserción de un elemento extra si n=50
cout << "Tamaño inicial del vector (max 50): ";
cin >> n;
if (n > 50) {
cout << "Tamaño excede el máximo permitido." << endl;
return 1;
}
cout << "Ingrese los elementos del vector:" << endl;
for (int i = 0; i < n; i++) {
cout << "Elemento[" << i << "]: ";
cin >> v[i];
}
// --- Ordenamiento Shell Sort (copiado de la sección anterior) ---
int inter = n / 2;
while (inter > 0) {
for (int i = inter; i < n; i++) {
int j = i - inter;
while (j >= 0) {
int k = j + inter;
if (v[j] <= v[k]) {
j = -1;
} else {
aux = v[j];
v[j] = v[k];
v[k] = aux;
j = j - inter;
}
}
}
inter = inter / 2;
}
// --- Fin Shell Sort ---
cout << "\nEl vector ordenado (Shell Sort):" << endl;
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
cout << endl;
// --- Inserción de un nuevo elemento ---
cout << "\nIngrese nuevo elemento a insertar: ";
cin >> nuevoElemento;
// Encontrar la posición correcta para insertar
int pos = 0;
while (pos < n && v[pos] < nuevoElemento) {
pos++;
}
// Desplazar los elementos mayores hacia la derecha
for (int i = n; i > pos; i--) {
v[i] = v[i - 1];
}
// Insertar el nuevo elemento
v[pos] = nuevoElemento;
n++; // Incrementar el tamaño efectivo del vector
cout << "\nVector con nuevo elemento insertado:" << endl;
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
cout << endl;
getch(); // Espera a que se presione una tecla (dependiente de conio.h)
return 0;
}