VERSION 1.0CLASSBEGINMultiUse =-1'TruePersistable =0'NotPersistableDataBindingBehavior =0'vbNoneDataSourceBehavior =0'vbNoneMTSTransactionMode =0'NotAnMTSObjectEND
Attribute VB_Name ="Sort"
Attribute VB_GlobalNameSpace =False
Attribute VB_Creatable =True
Attribute VB_PredeclaredId =False
Attribute VB_Exposed =FalsePrivate Num AsLongPrivate Aux()AsIntegerPrivate R()AsIntegerPrivateSub Class_Initialize()
Num =0EndSubPublicPropertyLet SetNum(ByVal NumberOfData AsLong)Num = NumberOfData -1ReDim Aux(NumberOfData)EndPropertyPublicPropertyLet SetRArray(ByRef RArray()AsInteger)R = RArray
EndPropertyPublicSub selectSort(L()AsInteger)Dim i AsLongDim j AsLongDim m AsLongDim t AsIntegerFor i =0To Numm = it = L(i)For j = i +1To NumIf t > L(j)Thent = L(j)m = jEndIfNext jIf m <> j Thent = L(i)L(i)= L(m)L(m)= tEndIfNext i
EndSubSub Merge(ByRef A()AsInteger,ByValLeftAsLong,ByVal m AsLong,ByValRightAsLong)Dim i AsLongDim j AsLongDim k AsLong
i = m +1While i >LeftAux(i -1)= A(i -1)i = i -1WendFor j = m ToRight-1Aux(Right+ m - j)= A(j +1)Next j
For k =LeftToRightIf Aux(j)< Aux(i)ThenA(k)= Aux(j)j = j -1ElseA(k)= Aux(i)i = i +1EndIfNext k
EndSubPublicSub mergeSort(ByRef L()AsInteger,ByValLeftAsLong,ByValRightAsLong)Dim m AsLong
m =Int(Left/2+Right/2)IfRight<=LeftThenExitSub
mergeSort L,Left, m
mergeSort L, m +1,Right
Merge L,Left, m,RightEndSubPublicSub QuickSort(L()AsInteger,ByVal Low AsLong,ByVal High AsLong)Dim i AsLongDim j AsLongDim Pivotkey AsInteger
i = Low: j = High
Pivotkey = L(Low)While(i < j)While(i < j And Pivotkey <= L(j))j = j -1WendIf(i < j)ThenL(i)= L(j)i = i +1EndIfWhile(i < j And L(i)< Pivotkey)i = i +1WendIf(i < j)ThenL(j)= L(i)j = j -1EndIfWend
L(i)= Pivotkey
If(Low < i)Then QuickSort L, Low, i -1If(i < High)Then QuickSort L, j +1, High
EndSubPrivateFunction Less(ByVal V AsLong, Rx()AsInteger,ByVal Item AsLong)AsBooleanIf Item <0Then Less =False:ExitFunctionLess = V < Rx(Item)EndFunctionPublicSub ShellSort(A()AsInteger,ByValLeftAsLong,ByValRightAsLong)Dim i AsLongDim j AsLongDim h AsLongDim V AsIntegerDim pa AsInteger
h =1For i =1To(Right-Left)/(Num -1)h =3* h +1Next i
While(h >0And DoEvents)For i =Left+ h ToRightj = iV = A(i)While(j >= L + h And Less(V, A, j - h))A(j)= A(j - h)j = j - hWendA(j)= VIf En Then DispNext ih =Int(h /3)WendEndSubSub RadixSort(A()AsInteger,ByVal n AsLong)DimMaxAsIntegerDim Count AsLongDim m AsLongMax=0For i =0To nIfMax< A(i)ThenMax= A(i)Next iReDim Aux(Max+1)For i =0To nm = A(i)Aux(m)= Aux(m)+1Next im =0For i =0ToMaxCount = Aux(i)If Count <>0ThenFor j =0To Count -1A(m)= im = m +1Next jEndIfNext i
EndSubPublicSub InsertSort(ByRef A()AsInteger,ByVal n AsLong)Dim i AsLongDim j AsLongDim Tmp AsIntegerFor i =1To nIf(A(i)< A(i -1))ThenTmp = A(i)A(i)= A(i -1)j = i -2While(Less(Tmp, A, j))j = j -1If(j >=0)ThenA(j +1)= A(j)EndIfWendA(j +1)= TmpEndIfNext i
EndSubPrivateSub Class_Terminate()Erase Aux
EndSub