Está en la página 1de 4

ALGORITMOS DE ORDENACION

1.- BURBUJA
public void MetodoBurbuja()
{
int t;
for (int a = 1; a < vector.Length; a++)
for (int b = vector.Length - 1; b >= a; b--)
{
if (vector[b - 1] > vector[b])
{
t = vector[b - 1];
vector[b - 1] = vector[b];
vector[b] = t;
}
}
}

2.- SHELL SORT


public void Shell()
{

int salto = 0;
int sw = 0;
int auxi = 0;
int e = 0;
salto = vector.Length / 2;
while (salto > 0)
{
sw = 1;
while (sw != 0)
{
sw = 0;
e = 1;
while (e <= (vector.Length - salto))
{
if (vector[e - 1] > vector[(e - 1) + salto])
{
auxi = vector[(e - 1) + salto];
vector[(e - 1) + salto] = vector[e - 1];
vector[(e - 1)] = auxi;
sw = 1;
}
e++;
}
}
salto = salto / 2;
}
}

3.- INSERCION DIRECTA


public void InsercionDirecta()

{
int auxili;
int j;
for (int i = 0; i < vector.Length; i++)
{
auxili = vector[i];
j = i - 1;
while (j >= 0 && vector[j] > auxili)
{
vector[j + 1] = vector[j];
j--;
}
vector[j + 1] = auxili;
}
}
4.- INSERCION BINARIA
public void InsercionDirecta()

{
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;
}
}
}
5.- MergeSort
public static void MergeSort(int[] x)
{
MergeSort(x, 0, x.Length - 1);
}

static private void MergeSort(int[] x, int desde, int hasta)


{
//Condicion de parada
if (desde == hasta)
return;

//Calculo la mitad del array


int mitad = (desde + hasta) / 2;

//Voy a ordenar recursivamente la primera mitad y luego la segunda


MergeSort(x, desde, mitad);
MergeSort(x, mitad + 1, hasta);

//Mezclo las dos mitades ordenadas


int[] aux = Merge(x, desde, mitad, mitad + 1, hasta);
Array.Copy(aux, 0, x, desde, aux.Length);
}

//Método que mezcla las dos mitades ordenadas


static private int[] Merge(int[] x, int desde1, int hasta1, int desde2, inthasta2)
{
int a = desde1;
int b = desde2;
int[] result = new int[hasta1 - desde1 + hasta2 - desde2 + 2];

for (int i = 0; i < result.Length; i++)


{
if (b != x.Length)
{
if (a > hasta1 && b <= hasta2)
{
result[i] = x[b];
b++;
}
if (b > hasta2 && a <= hasta1)
{
result[i] = x[a];
a++;
}
if (a <= hasta1 && b <= hasta2)
{
if (x[b] <= x[a])
{
result[i] = x[b];
b++;
}
else
{
result[i] = x[a];
a++;
}
}
}
else
{
if (a <= hasta1)
{
result[i] = x[a];
a++;
}
}
}
return result;
}
6.- QUICK SORT
private void quicksort(int[] vector, int primero, int ultimo)

{
int i, j, central;
double pivote;
central = (primero + ultimo) / 2;
pivote = vector[central];
i = primero;
j = ultimo;
do
{
while (vector[i] < pivote) i++;
while (vector[j] > pivote) j--;
if (i <= j)
{
int temp;
temp = vector[i];
vector[i] = vector[j];
vector[j] = temp;
i++;
j--;
}
} while (i <= j);

if (primero < j)
{
quicksort(vector, primero, j);
}
if (i < ultimo)
{
quicksort(vector, i, ultimo);
}
}
7.- SHAKER SORT
private void 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);
}

También podría gustarte