elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Source] Ordenar Array (Low y Fast)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Source] Ordenar Array (Low y Fast)  (Leído 3,643 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
[Source] Ordenar Array (Low y Fast)
« en: 28 Octubre 2009, 23:31 pm »

Versión Lenta... Fue sacado del ListBoxEx de LeandroAscierto, con una modificación para pasar el array en la funcion.

Código
  1. Option Explicit
  2.  
  3. Public Enum EnuListOrder
  4.    AcendetOrder = 0
  5.    DecendentOrder = 1
  6. End Enum
  7.  
  8. Public Sub Sorted(ByRef Item(), Optional Order As EnuListOrder = DecendentOrder)
  9.    Dim Itm As String
  10.    Dim J As Double
  11.    Dim i As Double
  12.    Dim mcount As Long
  13.    mcount = UBound(Item)
  14.  
  15.    If Order = AcendetOrder Then
  16.        For J = 0 To mcount
  17.            For i = 0 To mcount
  18.                If Item(i) > Item(i + 1) Then
  19.                    Itm = Item(i + 1)
  20.                    Item(i + 1) = Item(i)
  21.                    Item(i) = Itm
  22.                End If
  23.            Next i
  24.        Next J
  25.    Else
  26.        For J = 0 To mcount - 2
  27.            For i = 0 To mcount - 2
  28.                If Item(i) < Item(i + 1) Then
  29.                    Itm = Item(i + 1)
  30.                    Item(i + 1) = Item(i)
  31.                    Item(i) = Itm
  32.                End If
  33.            Next i
  34.        Next J
  35.    End If
  36. End Sub
  37.  


El siguiente es una versión mejorada por un Servidor... ordena adecuadamente los numeros ( Antes 0, 1, 10, 100,1000, ahora 0,1,2,3,4,5 ), Es muchas veces mas rapido que el anterior y más largo el codigo...

Código
  1. '
  2. '   /////////////////////////////////////////////////////////////
  3. '   // Autor Algoritmo: C.A.R. Hoare en 1960                   //
  4. '   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
  5. '   //                                                         //
  6. '   // Web:     http://InfrAngeluX.Sytes.Net/                  //
  7. '   //                                                         //
  8. '   //    |-> Pueden Distribuir Este Codigo siempre y cuando   //
  9. '   // no se eliminen los creditos originales de este codigo   //
  10. '   // No importando que sea modificado/editado o engrandesido //
  11. '   // o achicado, si es en base a este codigo                 //
  12. '   /////////////////////////////////////////////////////////////
  13.  
  14. Option Explicit
  15. Enum EnuListOrder
  16.    AcendetOrder = 0
  17.    DecendentOrder
  18. End Enum
  19. Private Sub AuxOrden(ByRef mArray(), _
  20.                    i As Long, j As Long, _
  21.                    il As Long, jl As Long)
  22. Dim c                                       As String
  23. Dim c2                                      As Long
  24.    c = mArray(j)
  25.    mArray(j) = mArray(i)
  26.    mArray(i) = c
  27.    c2 = il
  28.    il = -jl
  29.    jl = -c2
  30. End Sub
  31. Private Sub PreSort(ByRef mArray(), lb As Long, ub As Long, _
  32.                    k As Long, _
  33.            Optional Order As EnuListOrder = DecendentOrder)
  34. Dim i                                       As Long
  35. Dim j                                       As Long
  36. Dim il                                      As Long
  37. Dim jl                                      As Long
  38.    il = 0: jl = -1
  39.    i = lb: j = ub
  40.    While i < j
  41.        If Order = DecendentOrder Then
  42.            If IsNumeric(mArray(i)) And IsNumeric(mArray(j)) Then
  43.                If Val(mArray(i)) > Val(mArray(j)) Then
  44.                    Call AuxOrden(mArray(), i, j, il, jl)
  45.                End If
  46.            Else
  47.                If mArray(i) > mArray(j) Then
  48.                    Call AuxOrden(mArray(), i, j, il, jl)
  49.                End If
  50.            End If
  51.        Else
  52.            If IsNumeric(mArray(i)) And IsNumeric(mArray(j)) Then
  53.                If Val(mArray(i)) < Val(mArray(j)) Then
  54.                    Call AuxOrden(mArray(), i, j, il, jl)
  55.                End If
  56.            Else
  57.                If mArray(i) < mArray(j) Then
  58.                    Call AuxOrden(mArray(), i, j, il, jl)
  59.                End If
  60.            End If
  61.        End If
  62.        i = i + il
  63.        j = j + jl
  64.    Wend
  65.    k = i
  66. End Sub
  67. Private Sub QSort(ByRef mArray(), lb As Long, ub As Long, _
  68.                Optional Order As EnuListOrder = DecendentOrder)
  69. Dim k                                   As Long
  70.    If lb < ub Then
  71.        PreSort mArray, lb, ub, k, Order
  72.        Call QSort(mArray, lb, k - 1, Order)
  73.        Call QSort(mArray, k + 1, ub, Order)
  74.    End If
  75. End Sub
  76. Public Sub Start_QuickSort(ByRef mArray(), _
  77.                Optional Order As EnuListOrder = DecendentOrder)
  78.    If (Not (mArray)) = -1 Then Exit Sub ' Es para ver si esta inicializado el Arreglo
  79.    QSort mArray, LBound(mArray), UBound(mArray), DecendentOrder
  80. End Sub
  81.  

Ejemplo de Uso o llamda:

Código
  1. Option Explicit
  2. Private Sub Form_Load()
  3.      Dim i As Integer
  4.      Dim mArray(200)
  5.      For i = 0 To 100
  6.          Randomize
  7.          mArray(i) = i
  8.      Next i
  9.      For i = 101 To 200
  10.          Randomize
  11.          mArray(i) = Chr(Round(64 * Rnd()) + 65)
  12.      Next i
  13.      Start_QuickSort mArray, DecendentOrder
  14.      For i = 0 To 200
  15.          Debug.Print mArray(i)
  16.      Next i
  17. End Sub
  18.  

Dulces Lunas!¡.


« Última modificación: 29 Octubre 2009, 20:10 pm por ░▒▓BlackZeroҖ▓▒░ » En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Source] Ordenar Array (Low y Fast)
« Respuesta #1 en: 29 Octubre 2009, 00:09 am »

Disculpen el Doble post.

PAra el Primero:

http://www.conclase.net/c/orden/burbuja.html

Para quien desee saber mas sobre el Segundo metodo de ORdenamiento:

http://www.conclase.net/c/orden/quicksort.html

Otros:

http://www.conclase.net/c/orden/index.html

Dulces Lunas!¿.


« Última modificación: 29 Octubre 2009, 00:11 am por ░▒▓BlackZeroҖ▓▒░ » En línea

The Dark Shadow is my passion.
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [Source] Ordenar Array (Low y Fast)
« Respuesta #2 en: 29 Octubre 2009, 05:20 am »

muy bueno!!! es mucho mas complicado entenderlo pero en fin es mucho mas rapido no estoy muy seguro pero creo que hay una forma mas rapida aun utilizando CallWindowProc  que masomenos es lo que utilizan los listview pero bueno la verdad ni idea como.


saludos.
En línea

ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: [Source] Ordenar Array (Low y Fast)
« Respuesta #3 en: 29 Octubre 2009, 18:05 pm »

Muy bueno el ejemplo brother! :D
En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ordenar array bidimensional
Java
KaRaLLo 5 19,014 Último mensaje 1 Abril 2013, 02:36 am
por seraff
no entiendo porque pero no funciona ( ordenar array )
Programación C/C++
manutmac 6 4,574 Último mensaje 14 Noviembre 2012, 17:50 pm
por manutmac
ordenar array php
PHP
kakashi20 5 3,163 Último mensaje 28 Febrero 2013, 15:53 pm
por kakashi20
Ordenar un array de manera que queden del más cercano a M hasta el más alejado
Programación C/C++
maritere22 3 2,731 Último mensaje 10 Abril 2013, 17:17 pm
por rir3760
Ayuda para ordenar Array
.NET (C#, VB.NET, ASP)
bybaal 2 2,824 Último mensaje 15 Abril 2016, 12:37 pm
por bybaal
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines