ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

[­ì³Ð] ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç

[­ì³Ð] ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç

Option Explicit
Option Base 1
Option Compare Text

Public Sub S_¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç_01(ByRef ­ì©l¤Gºû°}¦C As Variant, ByVal ±Æ§Çºû«× As Long, ByVal ±Æ§ÇÁä­È As Long, ByVal °_­­ As Long, ByVal ¨´­­ As Long)

    On Error Resume Next
   
    If °_­­ >= ¨´­­ Then
        Exit Sub
    End If
   
    '------------------------------------------------------
   
    Dim X As Long
    Dim Y As Long
   
    Dim Â^¨ú¦¨¤@ºû°}¦C As Variant
    Dim ¯Á¤Þ°}¦C() As Long
   
    '------------------------------------------------------
   
    ReDim Â^¨ú¦¨¤@ºû°}¦C(°_­­ To ¨´­­) As Variant
    ReDim ¯Á¤Þ°}¦C(°_­­ To ¨´­­) As Long
   
    If ±Æ§Çºû«× = 1 Then
        For X = °_­­ To ¨´­­
            Â^¨ú¦¨¤@ºû°}¦C(X) = ­ì©l¤Gºû°}¦C(X, ±Æ§ÇÁä­È)
            ¯Á¤Þ°}¦C(X) = X
        Next X
    Else
        For Y = °_­­ To ¨´­­
            Â^¨ú¦¨¤@ºû°}¦C(Y) = ­ì©l¤Gºû°}¦C(±Æ§ÇÁä­È, Y)
            ¯Á¤Þ°}¦C(Y) = Y
        Next Y
    End If
   
    '------------------------------------------------------
   
    ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç Â^¨ú¦¨¤@ºû°}¦C, ¯Á¤Þ°}¦C, °_­­, ¨´­­
   
    '------------------------------------------------------
   
    Dim ½Æ»s­ì©l¤Gºû°}¦C As Variant
   
    ½Æ»s­ì©l¤Gºû°}¦C = ­ì©l¤Gºû°}¦C
   
    If ±Æ§Çºû«× = 1 Then
        For X = °_­­ To ¨´­­
            For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
                ­ì©l¤Gºû°}¦C(X, Y) = ½Æ»s­ì©l¤Gºû°}¦C(¯Á¤Þ°}¦C(X), Y)
            Next Y
        Next X
    Else
        For Y = °_­­ To ¨´­­
            For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
                ­ì©l¤Gºû°}¦C(X, Y) = ½Æ»s­ì©l¤Gºû°}¦C(X, ¯Á¤Þ°}¦C(Y))
            Next X
        Next Y
    End If

End Sub

Public Sub ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç(ByRef ­ì©l¤@ºû°}¦C As Variant, ByRef ¯Á¤Þ°}¦C() As Long, ByVal °_­­ As Long, ByVal ¨´­­ As Long)

    On Error Resume Next
   
    If °_­­ >= ¨´­­ Then
        Exit Sub
    End If
   
    '------------------------------------------------------
   
    Dim X As Long
    Dim Y As Long
    Dim S As Long
    Dim M As Long
    Dim E As Long
    Dim N As Long
   
    Dim ¼È¦s As Variant
    Dim ¯Á¤Þ¼È¦s As Long
    Dim °ò·Ç As Variant
   
    '------------------------------------------------------
   
    If ¨´­­ - °_­­ < 16 Then
        For X = °_­­ + 1 To ¨´­­
            ¼È¦s = ­ì©l¤@ºû°}¦C(X)
            ¯Á¤Þ¼È¦s = ¯Á¤Þ°}¦C(X)
            
            For Y = X - 1 To °_­­ Step -1
                If ¼È¦s >= ­ì©l¤@ºû°}¦C(Y) Then
                    Exit For
                End If
               
                ­ì©l¤@ºû°}¦C(Y + 1) = ­ì©l¤@ºû°}¦C(Y)
                ¯Á¤Þ°}¦C(Y + 1) = ¯Á¤Þ°}¦C(Y)
            Next Y
            
            ­ì©l¤@ºû°}¦C(Y + 1) = ¼È¦s
            ¯Á¤Þ°}¦C(Y + 1) = ¯Á¤Þ¼È¦s
        Next X
    Else
        Dim °ò·Ç°}¦C(3) As Variant
        
        °ò·Ç°}¦C(1) = ­ì©l¤@ºû°}¦C(°_­­)
        °ò·Ç°}¦C(2) = ­ì©l¤@ºû°}¦C((°_­­ + ¨´­­) \ 2)
        °ò·Ç°}¦C(3) = ­ì©l¤@ºû°}¦C(¨´­­)
        
        For X = 2 To 3
            ¼È¦s = °ò·Ç°}¦C(X)
            
            For Y = X - 1 To 1 Step -1
                If ¼È¦s >= °ò·Ç°}¦C(Y) Then
                    Exit For
                End If
               
                °ò·Ç°}¦C(Y + 1) = °ò·Ç°}¦C(Y)
            Next Y
            
            °ò·Ç°}¦C(Y + 1) = ¼È¦s
        Next X
        
        °ò·Ç = °ò·Ç°}¦C(2)
        
        '------------------------------------------------------
        
        Dim °_°}¦C As Variant
        Dim °ò°}¦C As Variant
        Dim ¨´°}¦C As Variant
        Dim ¯Á¤Þ°_°}¦C() As Long
        Dim ¯Á¤Þ°ò°}¦C() As Long
        Dim ¯Á¤Þ¨´°}¦C() As Long
        
        ReDim °_°}¦C(¨´­­ - °_­­) As Variant
        ReDim °ò°}¦C(¨´­­ - °_­­ + 1) As Variant
        ReDim ¨´°}¦C(¨´­­ - °_­­) As Variant
        ReDim ¯Á¤Þ°_°}¦C(¨´­­ - °_­­) As Long
        ReDim ¯Á¤Þ°ò°}¦C(¨´­­ - °_­­ + 1) As Long
        ReDim ¯Á¤Þ¨´°}¦C(¨´­­ - °_­­) As Long
        
        S = 0
        M = 0
        E = 0
        For X = °_­­ To ¨´­­
            ¼È¦s = ­ì©l¤@ºû°}¦C(X)
            ¯Á¤Þ¼È¦s = ¯Á¤Þ°}¦C(X)
            
            If ¼È¦s < °ò·Ç Then
                S = S + 1
                °_°}¦C(S) = ¼È¦s
                ¯Á¤Þ°_°}¦C(S) = ¯Á¤Þ¼È¦s
            ElseIf ¼È¦s = °ò·Ç Then
                M = M + 1
                °ò°}¦C(M) = ¼È¦s
                ¯Á¤Þ°ò°}¦C(M) = ¯Á¤Þ¼È¦s
            Else
                E = E + 1
                ¨´°}¦C(E) = ¼È¦s
                ¯Á¤Þ¨´°}¦C(E) = ¯Á¤Þ¼È¦s
            End If
        Next X
        
        '------------------------------------------------------
        
        If S > 1 Then
            ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç °_°}¦C, ¯Á¤Þ°_°}¦C, 1, S
        End If
        
        If E > 1 Then
            ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç ¨´°}¦C, ¯Á¤Þ¨´°}¦C, 1, E
        End If
        
        '------------------------------------------------------
        
        N = °_­­ - 1
        For X = 1 To S
            N = N + 1
            ­ì©l¤@ºû°}¦C(N) = °_°}¦C(X)
            ¯Á¤Þ°}¦C(N) = ¯Á¤Þ°_°}¦C(X)
        Next X
        
        For X = 1 To M
            N = N + 1
            ­ì©l¤@ºû°}¦C(N) = °ò°}¦C(X)
            ¯Á¤Þ°}¦C(N) = ¯Á¤Þ°ò°}¦C(X)
        Next X
        
        For X = 1 To E
            N = N + 1
            ­ì©l¤@ºû°}¦C(N) = ¨´°}¦C(X)
            ¯Á¤Þ°}¦C(N) = ¯Á¤Þ¨´°}¦C(X)
        Next X
    End If

End Sub

cool !!
¤j¤j¤S§Ë¥X¤F2©Û£«

TOP

¦A²³æªº up   1¤U¤U
http://jackyq.pixnet.net/blog/post/105371749

TOP

±Æ§Ç°}¦C¡G10000 x 2 ªº¾ã¼Æ¡]¦ý§Úªº¤Þ¼Æ¥N½X¬OVariant¡^

1.¤£­«½Æ¼Æ¦r¡G¶¶§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷12.525¬í
¡@¡@¡@¡@¡@¡@¡@°f§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷14.420¬í
¡@¡@¡@¡@¡@¡@¡@¶Ã§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷14.602¬í
2.­«½Æ¼Æ¦r¡G¶¶§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷8.897¬í
¡@¡@¡@¡@¡@¡@°f§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷9.236¬í
¡@¡@¡@¡@¡@¡@¶Ã§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷9.146¬í
¡]­«½Æ¼Æ¦r¤j·§¦b5~20­Ó¤§¶¡¡^
¦ô­p­«½Æ¤£­«½Æ¼vÅT¸û¤j¡A¶¶§Ç¸û§Ö¡A¥i¯à¬O´¡¤J±Æ§Çªº¼vÅT¡A°f§Ç¤Î¶Ã§Ç¬Û®t¤£¤j¡C

²z½×¤W®É¶¡¡G¡]¤£ª¾¥¿¤£¥¿½T¡^
´¡¤J±Æ§Ç¡G¶¶§Ç<¶Ã§Ç<°f§Ç¡A­«½Æ<¤£­«½Æ
¤@¯ëªº§Ö³tí©w±Æ§Ç¡G¶¶§Ç<¶Ã§Ç¡Ü°f§Ç¡A¤£­«½Æ<­«½Æ
§Úªº§Ö³t´¡¤Jí©w±Æ§Ç¡G¶¶§Ç<°f§Ç¡Ü¶Ã§Ç¡A­«½Æ<¤£­«½Æ

TOP

¦^´_ 3# jackyq


    Áo©ú¡I

¬Ý¤F¤@¤U¡A¤F¸Ñ°Ú¡A­ì¨Óªº«ä¦ÒÁÙ°±¯d¦b¤@ºû±Æ§Ç¡A
¦hºû±Æ§ÇÂ^¨úªº¤@ºû±Æ§Ç­nªº¥u¬O¯Á¤Þ¡A©Ò¥H­ì°}¦C³Ì«á¤£¥²¼g¦^¡A¦]¬°¤£¥²¼g¦^¡A°_°}¦C©M¨´°}¦C¤]¤£¥²¼g¤J¡Aª½±µ¥Î¯Á¤Þ¨ú±o¡C

¦ý¬°¦ó´¡¤J±Æ§Çªº³¡¤À¤£ª½±µ¥Î¯Á¤Þ¨ú±o°}¦C¡H

TOP

¦^´_ 3# jackyq


    §Ú·Q³q¤F¡A´¡¤J±Æ§Çªº¯S©Ê¡A¤£¯à¥Ñ¯Á¤Þ¨ú±o°}¦C­È¡A¦]¬°¤ñ¸û°ò©ó°}¦C¥»¨­ªº¶¶§Ç¡C

ÁÙ¦³¨ú±oªº°ò·Ç¤]»P¤§«e¥N½X¨ú±oªº¤£¦P¡C

TOP

¦AÀu¤Æ
  1. Option Explicit
  2. Option Base 1
  3. Option Compare Text

  4. Public Sub S_¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç_01(ByRef ­ì©l¤Gºû°}¦C As Variant, ByVal ±Æ§Çºû«× As Long, ByVal ±Æ§ÇÁä­È As Long, ByVal °_­­ As Long, ByVal ¨´­­ As Long)

  5.     On Error Resume Next
  6.    
  7.     If °_­­ >= ¨´­­ Then
  8.         Exit Sub
  9.     End If
  10.    
  11.     '------------------------------------------------------
  12.    
  13.     Dim X As Long
  14.     Dim Y As Long
  15.    
  16.     Dim Â^¨ú¦¨¤@ºû°}¦C As Variant
  17.     Dim ¯Á¤Þ°}¦C() As Long
  18.    
  19.     '------------------------------------------------------
  20.    
  21.     ReDim Â^¨ú¦¨¤@ºû°}¦C(°_­­ To ¨´­­) As Variant
  22.     ReDim ¯Á¤Þ°}¦C(°_­­ To ¨´­­) As Long
  23.    
  24.     If ±Æ§Çºû«× = 1 Then
  25.         For X = °_­­ To ¨´­­
  26.             Â^¨ú¦¨¤@ºû°}¦C(X) = ­ì©l¤Gºû°}¦C(X, ±Æ§ÇÁä­È)
  27.             ¯Á¤Þ°}¦C(X) = X
  28.         Next X
  29.     Else
  30.         For Y = °_­­ To ¨´­­
  31.             Â^¨ú¦¨¤@ºû°}¦C(Y) = ­ì©l¤Gºû°}¦C(±Æ§ÇÁä­È, Y)
  32.             ¯Á¤Þ°}¦C(Y) = Y
  33.         Next Y
  34.     End If
  35.    
  36.     '------------------------------------------------------
  37.    
  38.     ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç Â^¨ú¦¨¤@ºû°}¦C, ¯Á¤Þ°}¦C, °_­­, ¨´­­
  39.    
  40.     '------------------------------------------------------
  41.    
  42.     Dim ½Æ»s­ì©l¤Gºû°}¦C As Variant
  43.    
  44.     ½Æ»s­ì©l¤Gºû°}¦C = ­ì©l¤Gºû°}¦C
  45.    
  46.     If ±Æ§Çºû«× = 1 Then
  47.         For X = °_­­ To ¨´­­
  48.             For Y = LBound(­ì©l¤Gºû°}¦C, 2) To UBound(­ì©l¤Gºû°}¦C, 2)
  49.                 ­ì©l¤Gºû°}¦C(X, Y) = ½Æ»s­ì©l¤Gºû°}¦C(¯Á¤Þ°}¦C(X), Y)
  50.             Next Y
  51.         Next X
  52.     Else
  53.         For Y = °_­­ To ¨´­­
  54.             For X = LBound(­ì©l¤Gºû°}¦C, 1) To UBound(­ì©l¤Gºû°}¦C, 1)
  55.                 ­ì©l¤Gºû°}¦C(X, Y) = ½Æ»s­ì©l¤Gºû°}¦C(X, ¯Á¤Þ°}¦C(Y))
  56.             Next X
  57.         Next Y
  58.     End If

  59. End Sub

  60. Public Sub ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç(ByRef ­ì©l¤@ºû°}¦C As Variant, ByRef ¯Á¤Þ°}¦C() As Long, ByVal °_­­ As Long, ByVal ¨´­­ As Long)

  61.     On Error Resume Next
  62.    
  63.     If °_­­ >= ¨´­­ Then
  64.         Exit Sub
  65.     End If
  66.    
  67.     '------------------------------------------------------
  68.    
  69.     Dim X As Long
  70.     Dim Y As Long
  71.     Dim S As Long
  72.     Dim M As Long
  73.     Dim E As Long
  74.     Dim N As Long
  75.    
  76.     Dim ¼È¦s As Variant
  77.     Dim ¯Á¤Þ¼È¦s As Long
  78.    
  79.     '------------------------------------------------------
  80.    
  81.     If ¨´­­ - °_­­ < 16 Then
  82.         Dim ÁÙ­ì°}¦C As Variant
  83.         
  84.         ReDim ÁÙ­ì°}¦C(°_­­ To ¨´­­) As Variant
  85.         
  86.         For X = °_­­ To ¨´­­
  87.             ÁÙ­ì°}¦C(X) = ­ì©l¤@ºû°}¦C(¯Á¤Þ°}¦C(X))
  88.         Next X
  89.         
  90.         For X = °_­­ + 1 To ¨´­­
  91.             ¼È¦s = ÁÙ­ì°}¦C(X)
  92.             ¯Á¤Þ¼È¦s = ¯Á¤Þ°}¦C(X)
  93.             
  94.             For Y = X - 1 To °_­­ Step -1
  95.                 If ¼È¦s >= ÁÙ­ì°}¦C(Y) Then
  96.                     Exit For
  97.                 End If
  98.                
  99.                 ÁÙ­ì°}¦C(Y + 1) = ÁÙ­ì°}¦C(Y)
  100.                 ¯Á¤Þ°}¦C(Y + 1) = ¯Á¤Þ°}¦C(Y)
  101.             Next Y
  102.             
  103.             ÁÙ­ì°}¦C(Y + 1) = ¼È¦s
  104.             ¯Á¤Þ°}¦C(Y + 1) = ¯Á¤Þ¼È¦s
  105.         Next X
  106.     Else
  107.         Dim °ò·Ç As Variant
  108.         Dim °ò·Ç°}¦C(3) As Variant
  109.         
  110.         °ò·Ç°}¦C(1) = ­ì©l¤@ºû°}¦C(¯Á¤Þ°}¦C(°_­­))
  111.         °ò·Ç°}¦C(2) = ­ì©l¤@ºû°}¦C(¯Á¤Þ°}¦C((°_­­ + ¨´­­) \ 2))
  112.         °ò·Ç°}¦C(3) = ­ì©l¤@ºû°}¦C(¯Á¤Þ°}¦C(¨´­­))
  113.         
  114.         For X = 2 To 3
  115.             ¼È¦s = °ò·Ç°}¦C(X)
  116.             
  117.             For Y = X - 1 To 1 Step -1
  118.                 If ¼È¦s >= °ò·Ç°}¦C(Y) Then
  119.                     Exit For
  120.                 End If
  121.                
  122.                 °ò·Ç°}¦C(Y + 1) = °ò·Ç°}¦C(Y)
  123.             Next Y
  124.             
  125.             °ò·Ç°}¦C(Y + 1) = ¼È¦s
  126.         Next X
  127.         
  128.         °ò·Ç = °ò·Ç°}¦C(2)
  129.         
  130.         '------------------------------------------------------
  131.         
  132.         Dim ¯Á¤Þ°_°}¦C() As Long
  133.         Dim ¯Á¤Þ°ò°}¦C() As Long
  134.         Dim ¯Á¤Þ¨´°}¦C() As Long
  135.         
  136.         ReDim ¯Á¤Þ°_°}¦C(¨´­­ - °_­­) As Long
  137.         ReDim ¯Á¤Þ°ò°}¦C(¨´­­ - °_­­ + 1) As Long
  138.         ReDim ¯Á¤Þ¨´°}¦C(¨´­­ - °_­­) As Long
  139.         
  140.         S = 0
  141.         M = 0
  142.         E = 0
  143.         For X = °_­­ To ¨´­­
  144.             ¯Á¤Þ¼È¦s = ¯Á¤Þ°}¦C(X)
  145.             ¼È¦s = ­ì©l¤@ºû°}¦C(¯Á¤Þ¼È¦s)
  146.             
  147.             If ¼È¦s < °ò·Ç Then
  148.                 S = S + 1
  149.                 ¯Á¤Þ°_°}¦C(S) = ¯Á¤Þ¼È¦s
  150.             ElseIf ¼È¦s = °ò·Ç Then
  151.                 M = M + 1
  152.                 ¯Á¤Þ°ò°}¦C(M) = ¯Á¤Þ¼È¦s
  153.             Else
  154.                 E = E + 1
  155.                 ¯Á¤Þ¨´°}¦C(E) = ¯Á¤Þ¼È¦s
  156.             End If
  157.         Next X
  158.         
  159.         '------------------------------------------------------
  160.         
  161.         If S > 1 Then
  162.             ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç ­ì©l¤@ºû°}¦C, ¯Á¤Þ°_°}¦C, 1, S
  163.         End If
  164.         
  165.         If E > 1 Then
  166.             ¤Gºû°}¦C§Ö³t´¡¤Jí©w»¼¼W±Æ§Ç ­ì©l¤@ºû°}¦C, ¯Á¤Þ¨´°}¦C, 1, E
  167.         End If
  168.         
  169.         '------------------------------------------------------
  170.         
  171.         N = °_­­ - 1
  172.         For X = 1 To S
  173.             N = N + 1
  174.             ¯Á¤Þ°}¦C(N) = ¯Á¤Þ°_°}¦C(X)
  175.         Next X
  176.         
  177.         For X = 1 To M
  178.             N = N + 1
  179.             ¯Á¤Þ°}¦C(N) = ¯Á¤Þ°ò°}¦C(X)
  180.         Next X
  181.         
  182.         For X = 1 To E
  183.             N = N + 1
  184.             ¯Á¤Þ°}¦C(N) = ¯Á¤Þ¨´°}¦C(X)
  185.         Next X
  186.     End If

  187. End Sub
½Æ»s¥N½X
±Æ§Ç°}¦C¡G10000 x 2 ªº¾ã¼Æ¡]¦ý§Úªº¤Þ¼Æ¥N½X¬OVariant¡^

1.¤£­«½Æ¼Æ¦r¡G¶¶§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷7.598¬í
¡@¡@¡@¡@¡@¡@¡@°f§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷9.393¬í
¡@¡@¡@¡@¡@¡@¡@¶Ã§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷9.462¬í
2.­«½Æ¼Æ¦r¡G¶¶§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷5.176¬í
¡@¡@¡@¡@¡@¡@°f§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷5.517¬í
¡@¡@¡@¡@¡@¡@¶Ã§Ç¡÷°õ¦æ100¦¸Á`¦X¡÷5.89¬í
¡]­«½Æ¼Æ¦r¤j·§¦b5~20­Ó¤§¶¡¡^
¦ô­p­«½Æ¤£­«½Æ¼vÅT¸û¤j¡A¶¶§Ç¸û§Ö¡A¥i¯à¬O´¡¤J±Æ§Çªº¼vÅT¡A°f§Ç¤Î¶Ã§Ç¬Û®t¤£¤j¡C

²z½×¤W®É¶¡¡G¡]¤£ª¾¥¿¤£¥¿½T¡^
´¡¤J±Æ§Ç¡G¶¶§Ç<¶Ã§Ç<°f§Ç¡A­«½Æ<¤£­«½Æ
¤@¯ëªº§Ö³tí©w±Æ§Ç¡G¶¶§Ç<¶Ã§Ç¡Ü°f§Ç¡A¤£­«½Æ<­«½Æ
§Úªº§Ö³t´¡¤Jí©w±Æ§Ç¡G¶¶§Ç<°f§Ç¡Ü¶Ã§Ç¡A­«½Æ<¤£­«½Æ

TOP

        ÀR«ä¦Û¦b : ¤H¥Í¤£¤@©w²y²y¬O¦n²y¡A¦ý¬O¦³¾ú½mªº±j¥´ªÌ¡AÀH®É³£¥i¥H´§´Î¡C
ªð¦^¦Cªí ¤W¤@¥DÃD