Metodos de Ordenamiento en c#

Iniciado por alexvem, 4 Agosto 2008, 18:02 PM

0 Miembros y 1 Visitante están viendo este tema.

alexvem

Insercion Directa

Console.WriteLine("Metodo de insercion directa");
                    int auxili;
                    int j;
                    for (int i = 0; i < numeros.Length ; i++)
                    {
                        auxili = numeros[i];
                        j = i - 1;
                        while (j >= 0 && numeros[j] > auxili)
                        {
                            numeros[j + 1] = numeros[j];
                            j--;
                        }
                        numeros[j + 1] = auxili;
                    }
                    for (int i = 0; i < longitud; i++)
                    Console.WriteLine(" " + numeros[i]);


Insercion Binaria

int auxiliar;
                    int q;
                    int izqui;
                    int dere;
                    for (int i = 0; i < numeros.Length; i++)
                    {
                        auxiliar = numeros[i];
                        izqui = 0;
                        dere = i - 1;
                        while (izqui <= dere)
                        {
                            q = ((izqui + dere) / 2);
                            if (auxiliar < numeros[q])
                            {
                                dere = q - 1;
                            }
                            else
                            {
                                izqui = q + 1;
                            }
                            j = i - 1;
                            while (j >= izqui)
                            {
                                numeros[j + 1] = numeros[j];
                                j = j - 1;
                            }
                            numeros[izqui] = auxiliar;
                        }
                    }
                    for (int i = 0; i < longitud; i++)
                        Console.WriteLine(" " + numeros[i]);


Shell
int salto = 0;
                    int sw=0;
                    int auxi = 0;
                    int e=0;
                    salto =longitud /2;
                    while (salto >0)
                    {
                        sw=1;
                        while (sw!=0)
                        {
                            sw=0;
                            e=1;
                            while (e<=(longitud -salto ))
                            {
                                if (numeros [e-1]>numeros [(e-1)+salto ])
                                {
                                    auxi =numeros [(e-1)+salto ];
                                    numeros [(e-1)+salto ]=numeros [e-1];
                                    numeros [(e-1)]=auxi;
                                    sw=1;
                                }
                                e++;
                            }
                        }
                        salto =salto /2;
                    }
                    for (int i = 0; i < longitud; i++)
                    Console.WriteLine(" " + numeros[i]);

Quick Sort

int izquierda,derecha;
                    int pivot, i_det, d_det;
                    i_det = izquierda;
                    d_det = derecha;
                    pivot = numeros[izquierda];

                    while (izquierda <derecha )
                    {
                        while ((numeros [derecha ]>=pivot ) &&(izquierda <derecha ))
                        {
                            derecha --;
                        }
                        if (izquierda !=derecha )
                        {
                            numeros [izquierda]=numeros [derecha ];
                            izquierda ++;
                        }
                        while ((numeros [izquierda ]<=pivot )&&(izquierda <derecha ))
                        {
                            izquierda ++;
                        }
                        if (izquierda !=derecha )
                        {
                            numeros [derecha]=numeros [izquierda ];
                            derecha --;
                        }
                    }
                    numeros[izquierda] = pivot;
                    pivot = izquierda;
                    izquierda = i_det;
                    derecha = d_det;

                    if (izquierda < pivot)
                    {
                        quicksort(izquierda, pivot - 1);
                    }
                    if (derecha > pivot)
                    {
                        quicksort(pivot + 1, derecha);
                    }


Burbuja

int a,b,t;

               for(a=1;a<longitud ;a++)
                        for(b=longitud -1;b>=a;b--)
                        {
                            if (numeros [b-1]>numeros [b])
                            {
                                t=numeros [b-1];
                                numeros [b-1]=numeros [b];
                                numeros [b]=t;
                            }
                        }
                    //desplegar arreglo
                    Console.WriteLine("Bubble sort");
                    for (int i = 0; i < longitud; i++)
                    Console.WriteLine(" " + numeros[i]);


Shaker

int n = numeros.Length;
                    int izq = 1;
                    int k = n;
                    int aux;
                    int der = n;

                    do
                    {
                        for (int i = der; i >= izq; i--)
                        {
                            if (numeros[i - 1] > numeros[i])
                            {
                                aux = numeros[i - 1];
                                numeros[i - 1] = numeros[i];
                                numeros[i] = aux;
                                k = i;
                            }
                        }
                        izq =k+1;
                        for (int i=izq;i<=der;i++)
                        {
                            if (numeros [i-1]>numeros [i])
                            {
                                aux=numeros [i-1];
                                numeros [i-1]=numeros [i];
                                numeros [i] =aux;
                                k=1;
                            }
                            }
                        der =k-1;
                    }
                    while (der>=izq );
                   
                    for (int i = 0; i < longitud; i++)
                    Console.WriteLine(" " + numeros[i]);