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 :P

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í:
Ordenamiento burbuja

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

y este es el código fuente:

VB.NET:
  1. Public Class Form1
  2.  
  3.     Private Function getMilisegundos(ByVal fecha As Date) As Long
  4.         Dim respuesta As Long = 0
  5.         Dim dteFechaAux As Date = New Date(1970, 1, 1, 0, 0, 0, 0)
  6.         respuesta = DateDiff(DateInterval.Second, dteFechaAux, fecha) * 1000 + fecha.Millisecond
  7.         Return respuesta
  8.     End Function
  9.  
  10.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  11.         Dim vec1(1999), vec2(1999), vec3(1999) As Integer
  12.         Dim rand As New Random
  13.         Dim a, b, flag, aux, comp1, comp2, comp3, inter1, inter2, inter3 As Integer
  14.         Dim tim1I As Long = 0
  15.         Dim tim1F As Long = 0
  16.         Dim tim2I As Long = 0
  17.         Dim tim2F As Long = 0
  18.         Dim tim3I As Long = 0
  19.         Dim tim3F As Long = 0
  20.  
  21.         'llenamos el primer vector de numeros aleatorios
  22.         For a = 0 To vec1.Length - 1
  23.             vec1(a) = rand.Next(0, 101)
  24.         Next
  25.  
  26.         'copiamos el primer vector al segundo y tercero para hacer la comparativa de rendimiento y funcionalidad
  27.         vec2 = vec1.Clone
  28.         vec3 = vec1.Clone
  29.  
  30.         'ordenamos primer vector con metodo de Burbuja Simple y contamos el tiempo trancurrido y total de intercambios
  31.         comp1 = 0
  32.         inter1 = 0
  33.         tim1I = getMilisegundos(DateTime.Now)
  34.         For a = 0 To vec1.Length - 1
  35.             For b = 0 To vec1.Length - 1
  36.                 comp1 += 1 'incrementamos el contador de comparaciones
  37.                 If vec1(a) <vec1(b) Then
  38.                     inter1 += 1 'incrementamos el contador de intercambios
  39.                     'intercambiamos
  40.                     aux = vec1(a)
  41.                     vec1(a) = vec1(b)
  42.                     vec1(b) = aux
  43.                 End If
  44.             Next
  45.         Next
  46.         tim1F = getMilisegundos(DateTime.Now)
  47.  
  48.         'ordenamos segundo vector con metodo de Burbuja Mejorada y contamos el tiempo trancurrido y total de intercambios
  49.         comp2 = 0
  50.         inter2 = 0
  51.         tim2I = getMilisegundos(DateTime.Now)
  52.         For a = 0 To vec2.Length - 2
  53.             For b = a + 1 To vec2.Length - 1
  54.                 comp2 += 1 'incrementamos el contador de comparaciones
  55.                 If vec2(a)> vec2(b) Then
  56.                     inter2 += 1 'incrementamos el contador de intercambios
  57.                     'intercambiamos
  58.                     aux = vec2(a)
  59.                     vec2(a) = vec2(b)
  60.                     vec2(b) = aux
  61.                 End If
  62.             Next
  63.         Next
  64.         tim2F = getMilisegundos(DateTime.Now)
  65.  
  66.         'ordenamos tercer vector con metodo de Burbuja Mejorada con Bandera (Flag) y contamos el tiempo trancurrido y total de intercambios
  67.         comp3 = 0
  68.         inter3 = 0
  69.         flag = 0
  70.         tim3I = getMilisegundos(DateTime.Now)
  71.         For a = 0 To vec3.Length - 2
  72.             flag = 0 'cada vuelta externa, la bandera se inicializa a 0
  73.             For b = a + 1 To vec3.Length - 1
  74.                 comp3 += 1 'incrementamos el contador de comparaciones
  75.                 If vec3(a)> vec3(b) Then
  76.                     inter3 += 1 'incrementamos el contador de intercambios
  77.                     'intercambiamos
  78.                     aux = vec3(a)
  79.                     vec3(a) = vec3(b)
  80.                     vec3(b) = aux
  81.                     flag = 1 'hubo cambios, activamos bandera
  82.                 End If
  83.             Next
  84.             If (flag = 0) Then a = vec3.Length - 2 'si no hubo intercambios, nos salimos del ciclo externo
  85.         Next
  86.         tim3F = getMilisegundos(DateTime.Now)
  87.  
  88.         'imprimimos vectores 1,2 y 3 ordenados
  89.         txt1.Text = ""
  90.         txt2.Text = ""
  91.         txt3.Text = ""
  92.         For a = 0 To vec1.Length - 1
  93.             txt1.Text &= vec1(a) & vbNewLine
  94.             txt2.Text &= vec2(a) & vbNewLine
  95.             txt3.Text &= vec3(a) & vbNewLine
  96.         Next
  97.  
  98.         'imprimimos resultados
  99.         lblcomp1.Text = ""
  100.         lblcomp2.Text = ""
  101.         lblcomp3.Text = ""
  102.         lblinter1.Text = ""
  103.         lblinter2.Text = ""
  104.         lblinter3.Text = ""
  105.         lbltime1.Text = ""
  106.         lbltime2.Text = ""
  107.         lbltime3.Text = ""
  108.  
  109.         lblcomp1.Text = "Comparaciones: " & comp1
  110.         lblcomp2.Text = "Comparaciones: " & comp2
  111.         lblcomp3.Text = "Comparaciones: " & comp3
  112.         lblinter1.Text = "Intercambios: " & inter1
  113.         lblinter2.Text = "Intercambios: " & inter2
  114.         lblinter3.Text = "Intercambios: " & inter3
  115.         lbltime1.Text = "Tiempo: " & CType((tim1F - tim1I), String) & " mms"
  116.         lbltime2.Text = "Tiempo: " & CType((tim2F - tim2I), String) & " mms"
  117.         lbltime3.Text = "Tiempo: " & CType((tim3F - tim3I), String) & " mms"
  118.     End Sub
  119. 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.

Fuente del algoritmo