Hola amigos.
Ya tengo tiempo sin publicar post, :S lo que sucede es que ya entré a clases y pues siempre las primeras semanas son donde tienes un poco mas de labores que hacer jeje... Además estoy terminando de programar una nueva red social que espero y les guste.. pronto revelaré su identidad
Bueno pues este programa me lo acaban de dejar de tarea y pues en si ya lo había visto en el bachillerato pero lo tenía en Pascal y me daba flojera pasarlo a un lenguaje mas nuevo... Y pues aprovechando que lo tuve que hacer de tarea pues aquí les dejo una comparativa de funcionalidad de los métodos de ordenamiento mas fácil para iniciarse en esto de la programación: el ordenamiento burbuja, burbuja mejorada y burbuja con bandera (flag) y pues está escrito en Visual Basic .NET espero y les agrade...
En lo personal siento que este es el método de ordenamiento ideal para aprender y entender como funcionan los algoritmos de ordenamiento...
Al correr el programa luce así:

Aquí les dejo el algoritmo y más abajo el código fuente:

y este es el código fuente:
-
Public Class Form1
-
-
Private Function getMilisegundos(ByVal fecha As Date) As Long
-
Dim respuesta As Long = 0
-
Dim dteFechaAux As Date = New Date(1970, 1, 1, 0, 0, 0, 0)
-
respuesta = DateDiff(DateInterval.Second, dteFechaAux, fecha) * 1000 + fecha.Millisecond
-
Return respuesta
-
End Function
-
-
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
-
Dim vec1(1999), vec2(1999), vec3(1999) As Integer
-
Dim rand As New Random
-
Dim a, b, flag, aux, comp1, comp2, comp3, inter1, inter2, inter3 As Integer
-
Dim tim1I As Long = 0
-
Dim tim1F As Long = 0
-
Dim tim2I As Long = 0
-
Dim tim2F As Long = 0
-
Dim tim3I As Long = 0
-
Dim tim3F As Long = 0
-
-
'llenamos el primer vector de numeros aleatorios
-
For a = 0 To vec1.Length - 1
-
vec1(a) = rand.Next(0, 101)
-
Next
-
-
'copiamos el primer vector al segundo y tercero para hacer la comparativa de rendimiento y funcionalidad
-
vec2 = vec1.Clone
-
vec3 = vec1.Clone
-
-
'ordenamos primer vector con metodo de Burbuja Simple y contamos el tiempo trancurrido y total de intercambios
-
comp1 = 0
-
inter1 = 0
-
tim1I = getMilisegundos(DateTime.Now)
-
For a = 0 To vec1.Length - 1
-
For b = 0 To vec1.Length - 1
-
comp1 += 1 'incrementamos el contador de comparaciones
-
If vec1(a) <vec1(b) Then
-
inter1 += 1 'incrementamos el contador de intercambios
-
'intercambiamos
-
aux = vec1(a)
-
vec1(a) = vec1(b)
-
vec1(b) = aux
-
End If
-
Next
-
Next
-
tim1F = getMilisegundos(DateTime.Now)
-
-
'ordenamos segundo vector con metodo de Burbuja Mejorada y contamos el tiempo trancurrido y total de intercambios
-
comp2 = 0
-
inter2 = 0
-
tim2I = getMilisegundos(DateTime.Now)
-
For a = 0 To vec2.Length - 2
-
For b = a + 1 To vec2.Length - 1
-
comp2 += 1 'incrementamos el contador de comparaciones
-
If vec2(a)> vec2(b) Then
-
inter2 += 1 'incrementamos el contador de intercambios
-
'intercambiamos
-
aux = vec2(a)
-
vec2(a) = vec2(b)
-
vec2(b) = aux
-
End If
-
Next
-
Next
-
tim2F = getMilisegundos(DateTime.Now)
-
-
'ordenamos tercer vector con metodo de Burbuja Mejorada con Bandera (Flag) y contamos el tiempo trancurrido y total de intercambios
-
comp3 = 0
-
inter3 = 0
-
flag = 0
-
tim3I = getMilisegundos(DateTime.Now)
-
For a = 0 To vec3.Length - 2
-
flag = 0 'cada vuelta externa, la bandera se inicializa a 0
-
For b = a + 1 To vec3.Length - 1
-
comp3 += 1 'incrementamos el contador de comparaciones
-
If vec3(a)> vec3(b) Then
-
inter3 += 1 'incrementamos el contador de intercambios
-
'intercambiamos
-
aux = vec3(a)
-
vec3(a) = vec3(b)
-
vec3(b) = aux
-
flag = 1 'hubo cambios, activamos bandera
-
End If
-
Next
-
If (flag = 0) Then a = vec3.Length - 2 'si no hubo intercambios, nos salimos del ciclo externo
-
Next
-
tim3F = getMilisegundos(DateTime.Now)
-
-
'imprimimos vectores 1,2 y 3 ordenados
-
txt1.Text = ""
-
txt2.Text = ""
-
txt3.Text = ""
-
For a = 0 To vec1.Length - 1
-
txt1.Text &= vec1(a) & vbNewLine
-
txt2.Text &= vec2(a) & vbNewLine
-
txt3.Text &= vec3(a) & vbNewLine
-
Next
-
-
'imprimimos resultados
-
lblcomp1.Text = ""
-
lblcomp2.Text = ""
-
lblcomp3.Text = ""
-
lblinter1.Text = ""
-
lblinter2.Text = ""
-
lblinter3.Text = ""
-
lbltime1.Text = ""
-
lbltime2.Text = ""
-
lbltime3.Text = ""
-
-
lblcomp1.Text = "Comparaciones: " & comp1
-
lblcomp2.Text = "Comparaciones: " & comp2
-
lblcomp3.Text = "Comparaciones: " & comp3
-
lblinter1.Text = "Intercambios: " & inter1
-
lblinter2.Text = "Intercambios: " & inter2
-
lblinter3.Text = "Intercambios: " & inter3
-
lbltime1.Text = "Tiempo: " & CType((tim1F - tim1I), String) & " mms"
-
lbltime2.Text = "Tiempo: " & CType((tim2F - tim2I), String) & " mms"
-
lbltime3.Text = "Tiempo: " & CType((tim3F - tim3I), String) & " mms"
-
End Sub
-
End Class
Como verás el más rápido es el ordenamiento con bandera ya que esta basado en el método de burbuja mejorada.
Aquí te dejo lo archivos para que los descargues.