Está en la página 1de 12

SEMANA13

PRACTICA 13 – METODOS DE ORDENAMIENTO

1. OBJETIVOS
Implementar aplicaciones con métodos de ordenamiento: burbuja, inserción directa,
selección, Shell y quicksort.
2. EQUIPOS Y MATERIALES

Visual Studio

IMPLEMENTACIÓN EN CONSOLA

1. Método de Ordenamiento de Inserción directa en C#

Método de inserción directa.

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

namespace PruebaVector
{
class PruebaVector
{
private int[] vector;

public void Cargar()


{
Console.WriteLine("Metodo de insercion directa");
Console.Write("Cuantos longitud del vector:");
string linea;
linea = Console.ReadLine();
int cant;
cant = int.Parse(linea);
vector = new int[cant];
for (int f = 0; f < vector.Length; f++)
{
Console.Write("Ingrese elemento "+(f+1)+": ");
linea = Console.ReadLine();
vector[f] = int.Parse(linea);
}
}

public void InsercionDirecta()


1
Página

{
int auxili;

FUNDAMENTOS DE PROGRAMACION
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;
}
}

public void Imprimir()


{
Console.WriteLine("Vector ordenados en forma ascendente");
for (int f = 0; f < vector.Length; f++)
{
Console.Write(vector[f]+" ");
}
Console.ReadKey();
}

static void Main(string[] args)


{
PruebaVector pv = new PruebaVector();
pv.Cargar();
pv.InsercionDirecta();
pv.Imprimir();
}
}
}

Al ejecutar el código muestra el siguiente resultado


2
Página

FUNDAMENTOS DE PROGRAMACION
2. Método de Ordenamiento de Inserción Binaria en C#
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]);

3. Método de Ordenamiento Shell Sort en C#

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

namespace PruebaVector
{
class PruebaVector
{
private int[] vector;
3
Página

public void Cargar()

FUNDAMENTOS DE PROGRAMACION
{
Console.WriteLine("Metodo de Shell Sort");
Console.Write("Cuantos longitud del vector:");
string linea;
linea = Console.ReadLine();
int cant;
cant = int.Parse(linea);
vector = new int[cant];
for (int f = 0; f < vector.Length; f++)
{
Console.Write("Ingrese elemento "+(f+1)+": ");
linea = Console.ReadLine();
vector[f] = int.Parse(linea);
}
}

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;
}
}
4

public void Imprimir()


Página

FUNDAMENTOS DE PROGRAMACION
Console.WriteLine("Vector ordenados en forma
ascendente");
for (int f = 0; f < vector.Length; f++)
{
Console.Write(vector[f]+" ");
}
Console.ReadKey();
}

static void Main(string[] args)


{
PruebaVector pv = new PruebaVector();
pv.Cargar();
pv.Shell();
pv.Imprimir();
}
}
}

Al ejecutar el código muestra el siguiente resultado

4. Método de Ordenamiento Quick Sort en C#


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

namespace quicksort
{
class Class
{
static void Main()
{
int n;
5

Console.WriteLine("Metodo de Quick Sort");


Página

Console.Write("Cuantos longitud del vector: ");


n = Int32.Parse(Console.ReadLine());

FUNDAMENTOS DE PROGRAMACION
llenar b = new llenar(n);
}
}

class llenar
{
int h;
int[] vector;
public llenar(int n)
{
h = n;
vector = new int[h];
for (int i = 0; i < h; i++)
{
Console.Write("ingrese valor {0}: ", i + 1);
vector[i] = Int32.Parse(Console.ReadLine());
}
quicksort(vector, 0, h - 1);
mostrar();
}

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)
{
6

quicksort(vector, primero, j);


Página

FUNDAMENTOS DE PROGRAMACION
if (i < ultimo)
{
quicksort(vector, i, ultimo);
}
}

private void mostrar()


{
Console.WriteLine("Vector ordenados en forma
ascendente");
for (int i = 0; i < h; i++)
{
Console.Write("{0} ", vector[i]);
}
Console.ReadLine();
}
}
}

Al ejecutar el código muestra el siguiente resultado

5. Método de Ordenamiento Burbuja en C#


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

namespace Burbuja
{
class Burbuja
{
private int[] vector;
7
Página

public void Cargar()


{

FUNDAMENTOS DE PROGRAMACION
Console.WriteLine("Metodo de Burbuja");
Console.Write("Cuantos longitud del vector: ");
string linea;
linea = Console.ReadLine();
int cant;
cant = int.Parse(linea);
vector = new int[cant];
for (int f = 0; f < vector.Length; f++)
{
Console.Write("Ingrese elemento "+(f+1)+": ");
linea = Console.ReadLine();
vector[f] = int.Parse(linea);
}
}

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;
}
}
}

public void Imprimir()


{
Console.WriteLine("Vector ordenados en forma
ascendente");
for (int f = 0; f < vector.Length; f++)
{
Console.Write(vector[f]+" ");
}
Console.ReadKey();
}

static void Main(string[] args)


{
Burbuja pv = new Burbuja();
pv.Cargar();
pv.MetodoBurbuja();
8

pv.Imprimir();
Página

FUNDAMENTOS DE PROGRAMACION
}
}

Al ejecutar el código muestra el siguiente resultado

6. Método de Ordenamiento Shaker Sort en C#


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;
}
9
Página

}
der = k - 1;

FUNDAMENTOS DE PROGRAMACION
}
while (der >= izq);

for (int i = 0; i < longitud; i++)


Console.WriteLine(" " + numeros[i]);

7. Método de Ordenamiento Merge Sort


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

namespace MergeSort
{
class Program
{
static void Main(string[] args)
{
int[] nums = new int[40];
Console.WriteLine("Metodo de Merge Sort");
Console.Write("Cuantos longitud del vector: ");
string linea;
linea = Console.ReadLine();
int cant;
cant = int.Parse(linea);
nums = new int[cant];
for (int f = 0; f < nums.Length; f++)
{
Console.Write("Ingrese elemento " + (f + 1) + ": ");
linea = Console.ReadLine();
nums[f] = int.Parse(linea);
}
MergeSort(nums);
Console.WriteLine("Vector Ordenado Ascendentemente");
for (int i = 0; i < nums.Length; i++)
Console.Write(nums[i] + " ");
Console.ReadLine();
}

//Método portal que llama al método recursivo inicial


public static void MergeSort(int[] x)
{
MergeSort(x, 0, x.Length - 1);
}
10

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


Página

FUNDAMENTOS DE PROGRAMACION
//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, int hasta2)
{
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];
11

b++;
}
Página

else

FUNDAMENTOS DE PROGRAMACION
{
result[i] = x[a];
a++;
}
}
}
else
{
if (a <= hasta1)
{
result[i] = x[a];
a++;
}
}
}
return result;
}
}
}

Al ejecutar el código muestra el siguiente resultado

12
Página

FUNDAMENTOS DE PROGRAMACION

También podría gustarte