Está en la página 1de 5

METODOS DE ORDENACIN EN C#

Insercin Directa:
Este algoritmo se basa en hacer comparaciones, as que para que realice su trabajo de ordenacin son imprescindibles dos cosas: un array o estructura similar de elementos comparables y un criterio claro de comparacin, tal que dados dos elementos nos diga si estn 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 ordenada. Esa es una diferencia importante con BubbleSort y SelectionSort. En ellos, en cada pasada se colocaba una carta en su sitio definitivo. En InsertionSort, el array no est totalmente ordenado hasta que el algoritmo termina.
Cdigo: 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]);

Insercin Binaria:
La Insercin Binaria es un mtodo de insercin, que difiere de la Insercin Directa simplemente en la bsqueda de la posicin de la Insercin.
Cdigo: 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 o ShellSort:
Es un algoritmo de ordenacin interna muy sencillo pero muy ingenioso, basado en comparaciones e intercambios, y con unos resultados radicalmente mejores que los que se pueden obtener con el mtodo de la burbuja, el de seleccin directa o el de insercin directa.
Cdigo: 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]);

QuickSort:
La idea de este algoritmo de ordenacin es particionar el arreglo de elementos en dos subarreglos, no necesariamente de igual tamao, donde cualquier elemento de la primera ser menor que todo elemento de la segunda particin. Esto se logra seleccionando un valor aleatorio del arreglo, y una vez realizada esta parte del algoritmo, se aplica el algoritmo recursivamente a cada una de los subarreglos semiordenados.
Cdigo: 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:
Este mtodo consiste en ir comparando cada par de elementos del array e ir moviendo el mayor elemento hasta la ltima posicin, comenzando desde la posicin cero. Una vez acomodado el mayor elemento, prosigue a encontrar y acomodar el segundo ms grande comparando de nuevo los elementos desde el inicio de la lista, y as sigue hasta ordenar todos los elementos del arreglo.
Cdigo: 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:
El mtodo de sacudida es una optimizacin del mtodo de intercambio directo o burbuja. En este algoritmo cada pasada tiene dos etapas. En la primera etapa "de derecha a izquierda" se trasladan los elementos ms pequeos hacia la parte izquierda del arreglo, almacenando en una variable la posicin del ltimo elemento intercambiado. En la segunda etapa "de izquierda a derecha" se trasladan los elementos ms grandes hacia la parte derecha del arreglo, almacenando en otra variable la posicin del ltimo elemento intercambiado. El algoritmo termina cuando en una etapa no seproducen intercambios o bien, cuando el contenido de la variable que almacena el extremo izquierdo del arreglo es mayor que el contenido de la variable que almacena el extremo derecho.
Cdigo: 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]);

También podría gustarte