jueves, 27 de marzo de 2014

Metodos de Ordenamiento de Vectores



Método de Inserción  

La lógica de este algoritmo es comparar cada valor del vector con sus posteriores y luego ubicar dicho elemento en la posición respectiva.
Se basa en intentar construir una lista ordenada en el interior del array a ordenar.
Este algoritmo se basa en hacer comparaciones, así que para que realice su trabajo de ordenación son imprescindibles dos cosas: un array o estructura similar de elementos comparables y un criterio claro de comparación, tal que dados dos elementos nos diga si están en orden o no.
El algoritmo consiste en realizar varias pasadas sobre el array. En cada pasada se analiza un elemento, y se intenta encontrar su orden relativo entre los analizados en pasadas anteriores. Con esto se logra ir manteniendo una lista ordenada constantemente. Cada elemento a analizar se desplaza por esa lista hasta encontrar su lugar. Cuando todos los elementos del array han sido analizados, la lista está completamente ordenad.

Método de Shell
 
Es un algoritmo de ordenación interna muy sencillo pero muy ingenioso, basado en comparaciones e intercambios.
Sin embargo, es necesario romper una lanza a favor del algoritmo ShellSort, ya que es el mejor algoritmo de ordenación in-situ... es decir, el mejor de aquellos en los que la cantidad de memoria adicional que necesita -aparte de los propios datos a ordenar, claro está- es constante, sea cual sea la cantidad de datos a ordenar.

Método de Ordenamiento QuickSort (Rápido)

El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n. El algoritmo original es recursivo, pero se utilizan versiones iterativas para mejorar su rendimiento (los algoritmos recursivos son en general más lentos que los iterativos, y consumen más recursos).
El algoritmo fundamental es el siguiente:
  • Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote.
  • Resituar los demás elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que él, y al otro los mayores. En este momento, el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada.
  • La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha.
  • Repetir este proceso de forma recursiva para cada sublista mientras éstas contengan más de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados. Como se puede suponer, la eficiencia del algoritmo depende de la posición en la que termine el pivote elegido.

Método de ordenamiento de Burbuja

El ordenamiento de burbuja (Bubble Sort), también conocido como “método del intercambio directo” es un algoritmo que obtiene su nombre de la forma con la que suben los elementos de una lista, como si fueran “burbujas”. Funciona comparando elementos de dos en dos en un ciclo, intercambiándolos según sea el caso. Es necesario revisar varias veces toda la lista has que no se necesiten más intercambios.
El ordenamiento de burbuja lo que hace es seleccionar los primeros dos elementos, compararlos, y si el primero es mayor que el segundo, hace el intercambio, el mayor se va a una variable temporal, cediendo su lugar al número menor, y después pasa a ocupar la posición que ocupaba el otro. El procedimiento se lleva a cabo en un ciclo hasta que verifica todos los números y están correctamente ordenados.

Metodo de Shaker

El algoritmo de ordenación por el método Shaker, también conocido como "Cocktail" o "Sacudida" es una mejora del método de la burbuja en la cual el proceso se realiza tanto desde la primera posición a la última del arreglo como en sentido inverso, evitando así que los elementos más pequeños tarden un mayor tiempo en "ascender" a las posiciones superiores.



jueves, 20 de marzo de 2014

Tabla de Multiplicar, Numeros Primos

TABLA DE MULTIPLICAR 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tarea2
{
    class Program
    {
        static void Main(string[] args)
        {
            int vi, vf, vm, r, con;
           
            Console.WriteLine("ingrese un valor");
            vi = Convert.ToInt16(Console.ReadLine());

            Console.WriteLine("ingrese un valor");
            vf = Convert.ToInt16(Console.ReadLine());

            Console.WriteLine("ingrese un valor");
            vm = Convert.ToInt16(Console.ReadLine());

            Console.WriteLine("Bucle for");

            for (int i = vi; i <= vf; i++)
            {
                r = vm * i;
                Console.WriteLine(vm + "*" + i + "=" + r);
            }

            Console.ReadLine();

            Console.WriteLine("Bucle Do While ");
            con = 0;
            do
            {
                con = con+1;
                r = vm * con;
                Console.WriteLine(vm + "*" + con + "=" + r);
            } while (con<=vf);

            Console.ReadLine();

            Console.WriteLine("Bucle While ");
            con = 0;
            while (con<=vf)
            {
                con = con+1;
                r = vm * con;
                Console.WriteLine(vm + "*" + con + "=" + r);
            }
            Console.ReadLine();
        }
    }
}






10 PRIMEROS NUMEROS PRIMOS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10prinumprimos
{
    class Program
    {
        static void Main(string[] args)
        {
            int con = 0, i = 0, j, a, acu = 0;
            Console.WriteLine("10 Primeros Numeros Primos");

            do
            {
                i = i + 1;
                con = 0;
                for (j = 1; j <= i; j++)
                {
                    a = i % j;
                    if (a == 0)
                    {
                        con = con + 1;
                    }
                }

                if (con == 2)
                {
                    Console.WriteLine("" + i);
                    acu = acu + 1;
                }
               

            } while (acu < 10);
            Console.ReadLine();
        }
               
    }
}