Сортировка массивов

Пример сортировки массивов со строковыми данными по алфавиту. В строках при сортировке могут присутствовать цифры.
Платформы: Windows , Linux.
Автор: D.J.Peters, создано в 2007 году

сортировка массивов

Dim As String TheArray(10)

Sub StringArraySort(strings() As String)
  Dim As Integer l=lbound(Strings)
  Dim As Integer u=ubound(Strings)
  Dim As Integer n=u-l
  Dim As Integer flag,i,j,k,l1,l2
  ' nothing to sort I
  If n<2 Then Return

  ' optional move empty strings 
  ' to the end of array
  Do

    flag=0

    For i=l To u-1

      j=i+1

      If Len(Strings(i))=0 And Len(Strings(j))>0 Then

        swap Strings(i),Strings(j)
        flag=-1:Exit For

      End If

    Next

  Loop While Flag
  For i=l To u
    If Len(Strings(i))=0 Then u=i-1:Exit For

  Next

  n=u-l
  ' nothing to sort II
  If n<2 Then Return


  ' sort by ASCI codes
  Do

    flag=0

    ' loop over all items
    For i=l To u-1

      j=i+1

      l1=len(Strings(i))
      l2=len(Strings(j))
      If l1>l2 Then swap l1,l2
      For k=0 To l1-1

        If k Then

          If strings(i)[k-1]=strings(j)[k-1] Then

            If strings(i)[k]>strings(j)[k] Then

              swap Strings(i),Strings(j)
              flag=1:Exit For

            End If

          End If

        Else

          If strings(i)[k]>strings(j)[k] Then

            swap Strings(i),Strings(j)
            flag=1:Exit For

          End If

        End If

      Next

      If flag=-1 Then Exit For

    Next

  Loop While flag
End Sub


TheArray(0)="ABCF"
TheArray(1)=""
TheArray(2)="aBcD"
TheArray(3)="2abcD"
TheArray(4)="1abcC"
TheArray(5)="1ABC"
TheArray(6)="ABCD"
TheArray(7)="aBcd"
TheArray(8)=""
TheArray(9)=""
TheArray(10)="ABC"

For i As integer=0 To 10

  ? TheArray(i)
Next

? String(20,"=")
StringArraySort TheArray(0)
For i As integer=0 To 10

  If Len(TheArray(i)) Then ? TheArray(i)
Next

? String(20,"=")
Sleep