Que onda a todos.

De nuevo he estado con muchos trabajos, tareas, y dem谩s cosas y por lo mismo no he podido publicar muchas cosas... espero y ya lleguen las vacaciones para poder mejorar el servicio del blog :P

Bueno pues hoy publico esta tarea que me acaban de dejar y que ya hab铆a visto antes en Pascal jaja pero me da flojera publicar el c贸digo en pascal, y pues mejor lo publico en Visual Basic .net pero pues si alguien desea el c贸digo en Pascal, solo p铆danlo y lo pongo :p

Bueno este es otro m茅todo de selecci贸n tambi茅n de los mas utilizados para ense帽ar m茅todos de ordenamiento, pero por lo mismo que es muy f谩cil, no es muy pr谩ctico usarlo cuando uno desea ordenar datos a gran escala. Para eso mejor utiliza el Quick Sort, pero ese lo publicar茅 a ver si el martes ya que me dejen la tarea jaja ya que por ahorita tengo otras cosas que hacer ;)

Bueno veamos como funciona el algoritmo de Selecci贸n:

  1. Necesitamos recorrer cada uno de los elementos del vector (si tenemos 10 elementos, nuestro ciclo girar谩 10 veces) y por cada vuelta necesitamos hacer lo siguiente:
    • Buscamos el menor numero, comenzando en la posici贸n actual del ciclo exterior + 1 hasta terminar el vector.
    • Una vez que encontramos el numero menor, lo intercambiamos con el numero que este dentro del vector en la posici贸n de la vuelta externa (es decir, que si por ejemplo es la vuelta #3, entonces intercambiaremos vector[3] por la variable "minimo" )
    • Si no se encontr贸 un numero menor, entonces no sucede nada
  2. Hacemos esto hasta que el ciclo externo recorra todas las posiciones del vector

Y bueno aqu铆 esta una imagen para que te des idea visual de como funciona:

Y tambi茅n te dejo el algoritmo "codificado" para que veas m谩s o menos lo que necesitas hacer:

para i=1 hasta n-1
    minimo = i;
    para j=i+1 hasta n
        si lista[j] < lista[minimo] entonces
            minimo = j /* (!) */
        fin si
    fin para
    intercambiar(lista[i], lista[minimo])
fin para


Esta es una imagen de como queda este m茅todo en Visual Basic .Net:

y he aqu铆 el c贸digo:

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) As Integer
  12.         Dim rand As New Random
  13.         Dim a, b, min, Nmin, comp1 As Integer
  14.         Dim str1 As String
  15.         Dim tim1I As Long = 0
  16.         Dim tim1F As Long = 0
  17.  
  18.         'llenamos el primer vector de numeros aleatorios
  19.         For a = 0 To vec1.Length - 1
  20.             vec1(a) = rand.Next(0, 101)
  21.         Next
  22.  
  23.         'ordenamos primer vector con metodo de Selecci贸n y contamos el tiempo trancurrido y total de intercambios
  24.         comp1 = 0
  25.         tim1I = getMilisegundos(DateTime.Now)
  26.         Nmin = -1
  27.         For a = 0 To vec1.Length - 2
  28.             min = vec1(a)
  29.             For b = a + 1 To vec1.Length - 1
  30.                 comp1 += 1 'incrementamos el contador de comparaciones
  31.  
  32.                 If vec1(b) <min Then
  33.                     Nmin = b
  34.                     min = vec1(b)
  35.                 End If
  36.             Next
  37.             If Nmin <> -1 Then
  38.                 vec1(Nmin) = vec1(a)
  39.                 vec1(a) = min
  40.             End If
  41.             Nmin = -1
  42.         Next
  43.         tim1F = getMilisegundos(DateTime.Now)
  44.  
  45.         'imprimimos vectores 1,2 y 3 ordenados
  46.         txt1.Text = ""
  47.         str1 = ""
  48.         For a = 0 To vec1.Length - 1
  49.             str1 &= vec1(a) & vbNewLine
  50.         Next
  51.  
  52.         txt1.Text = str1
  53.  
  54.         'imprimimos resultados
  55.         lblcomp1.Text = ""
  56.         lblinter1.Text = ""
  57.         lbltime1.Text = ""
  58.  
  59.         lblcomp1.Text = "Comparaciones: " & comp1
  60.         lbltime1.Text = "Tiempo: " & CType((tim1F - tim1I), String) & " ms"
  61.     End Sub
  62. End Class

Aqu铆 te dejo los archivos para que los descargues:
Descarga

Fuente del algoritmo
Fuente de la imagen