Ir al contenido principal

05# Algoritmo de Ordenamiento

Un algoritmo de ordenamiento es aquel que se encarga de mover elementos de una estructura de datos y mover con una relación de orden especifica. (Abecedario, números ascendentes, descendentes, etc..).
Gracias a estos ordenamientos se puede lograr una mayor eficiencia en los algoritmos de búsqueda que hablamos anteriormente.
El beneficio principal como se mencionó es la de identificar la ubicación de un dato con mayor facilidad, ya que los elementos de la estructura llevan un orden definido.
La clasificación de estos algoritmos se define mayormente en 3 partes:
1-      Según desde donde está realizando el ordenamiento (memoria RAM o memoria secundaria)
2-      Según el tiempo que utilice para realizar el ordenamiento dependiendo de cómo se le entreguen los datos.
3-      La estabilidad del proceso de ordenamiento.

Bubble Sort:
Uno de los algoritmos más conocidos gracias a su fácil implementación.
Los pasos de este algoritmo son los siguientes:
#include<iostream>

using namespace std;

int main() {

   int num, aux;
   int comparaciones = 0;
   int intercambios = 0;
   int* arreglo;
   cout << "Cuantos numeros seran: ";
   cin >> num;
   arreglo = new int[num];
   cout << endl << "***CAPTURA DE NUMEROS***" << endl;

   for(int x = 0; x < num; x++) {
      cout << "Ingresa el numero " << x << " de la serie: ";
      cin >> arreglo[x];
      cout << endl;
   }
   cout << "***MUESTRA DE NUMEROS***" << endl;

   for(int y = 0; y < num; y++) {
      cout << "Numero " << y << ".- " << arreglo[y] << endl;
   }

   for(int z = 1; z < num; ++z) {
      for(int v = 0; v < (num - z); ++v) {
         comparaciones++;
         if(arreglo[v] > arreglo[v + 1]) {
            aux = arreglo[v];
            arreglo[v] = arreglo[v + 1];
            arreglo[v + 1] = aux;
            intercambios++;
         }
      }
    }

   cout << "***NUMEROS ARREGLADOS***" << endl;

   for(int w = 0; w < num; w++) {
      cout << "Numero " << w << ".- " << arreglo[w] << endl;
   }

   cout << "Numero de comparaciones: " << comparaciones << endl;
   cout << "Numero de intercambios: " << intercambios << endl;
 
   delete[] arreglo;
   return 0;
}

Random Sort o Fisher-Yates
Este puede no ser muy conocido, pero lo vemos a menudo en la vida diaria por ejemplo cuando pones el modo aleatorio en los reproductores de música o cuando estamos en un juego al azar en la computadora o el celular, detrás de todo esos procesos está el algoritmo mencionado.
Aquí los pasos que rige este algoritmo

Algoritmo BarajadoAleatorio:
 Entrada:
      Un Array(0,1,2,3,4... Cantidad-1) de valores.
 Salida:
      El mismo array con sus valores en posiciones aleatorias.
 Definición de variables:
      Cantidad: Un entero que señala la cantidad total de ítems que tiene el array.
      k: Un entero, que rige la cuenta del bucle.
      az: Un entero, elegido por una función Random en el rango 0-k (nótese que k se va reduciendo).
      tmp: Un entero, que ha de contener un valor para intercambiar valores entre 2 posiciones.
 Funciones auxiliares:
      Tamaño: Una función que devuelve la cantidad de elementos que contiene el array.
      Random: Una función que devuelve un número aleatorio de un rango de valores.
 
 Cantidad = Tamaño(Array)  
 Recorrer con k desde Cantidad-1 hasta 1 Regresivamente
    az = Random(entre 0 y k)
         
    tmp = Array(az)
    Array(az) = Array(k)
    Array(k) = tmp
 Siguiente
Fuente: Wikipedia


Si nos ponemos a ver mucho más a fondo existen muchos algoritmos que cumplen este mismo propósito, pero unos orientados de diferente manera.

Comentarios

Entradas más populares de este blog

11# Algoritmo de Prim

El algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de manera independiente por el científico computacional Robert C. Prim en 1957 y redescubierto por Dijkstra en 1959. Por esta razón, el algoritmo es también conocido como  algoritmo DJP  o  algoritmo de Jarnik . Descripción El algoritmo de Prim es un algoritmo perteneciente a la teoría de los grafos para encontrar un árbol recubridor mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas. Este incrementa continuamente el tama ño de un ár bol, comenzando por un vertice inicial al que se le van agregando sucesivamente vértices cuya distancia a los anteriores es mínima. Esto significa que en cada paso, las aristas a considerar son aquellas que inciden en vértices que ya pertenecen al árbol El árbol recubridor mínimo está completamente construido cuando no q...

09# Teoría de Grafos y Biología Molecular

Uno de los temas tocados en la semana de la computación fueron el de la teoría de grafos y la biología molecular. También se pudo ver cómo estas se conectaban, como esta teoría ayudo a realizar grandes descubrimientos en el área de la biología molecular. Primero que todo vamos a ver la definición de cada para tener una idea más clara. Teoría de Grafos: Esta es una rama de las matemáticas y las ciencias de la computación que las propiedades de los grafos. Estructuras de datos vistos en el curso de Estructuras de Datos en nuestra carrera. La biología molecular Es la disciplina científica que tiene como objetivo el estudio de los procesos que se desarrollan en los seres vivos desde un punto de vista molecular. Fuente: Wikipedia Ya que tenemos sus definiciones ahora explicaré sus puntos donde intersecan. Estas áreas se relacionan gracias a que en la biología molecular se necesitaba saber cuál era la composición exacta de los DNA, gracias a grandes matemáticos y científic...

04# Algoritmos de Búsqueda

Un algoritmo es como un conjunto de instrucciones que se deben seguir para realizar una tarea concreta. Este se rige por una serie de pasos o ciclos con sus condiciones definidas para el proceso del trabajo que se quiere hacer. Hoy nos basaremos mayormente en los algoritmos de búsqueda, estos se encargan de encontrar un elemento en una estructura de datos. Existen diversos algoritmos para este propósito. Unos de los vistos en las clases anteriores son el secuencial, binario y el de interpolación. Secuencial: Uno de los algoritmos más sencillos y fáciles de implementar, ya que su única función es la de comparar cada elemento de la estructura de datos con el elemento que se quiere encontrar: L: Largo de la estructura T: temporal contador ELE: Elemento a buscar A: Estructura donde se desea buscar Mientras L > T:                 Si ELE es igual a A posición [T]:     ...