vb排序程序1资料Word文件下载.docx
《vb排序程序1资料Word文件下载.docx》由会员分享,可在线阅读,更多相关《vb排序程序1资料Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。
List1.Visible=False
Fori=0ToUBound(Sums)
nn:
Randomize
z=99999*Rnd+9
j=SendMessageFind(List1.hWnd,&
H18F,0,z)
Ifj>
-1Then
GoTonn
Else
Sums(i)=z
Sumb(i)=z
List1.AddItemSums(i)
EndIf
Next
List1.Visible=True
Me.Caption="
共产生数据:
"
&
UBound(Sums)+1&
"
项"
EndSub
PrivateSubCommand2_Click()
DimtiAsInteger,iAsLong
List2.Clear
Fori=0ToUBound(Sumb)
Sums(i)=Sumb(i)
blnSort=Option1(0).Value
T=timeGetTime
IfOption2(0).Value=TrueThen
Callmpsort(Sums)
冒泡排序
ti=0
IfOption2
(1).Value=TrueThen
Callinsort(Sums)
插入排序
ti=1
IfOption2
(2).Value=TrueThen
CallQuickSort(LBound(Sums),UBound(Sums))
快速排序
ti=2
IfOption2(3).Value=TrueThen
Callselctsort(Sums)
选择排序
ti=3
IfOption2(4).Value=TrueThen
Callhirsort(Sums)
希尔排序
ti=4
IfOption2(5).Value=TrueThen
Callduisort(Sums)
堆排序
ti=5
IfOption2(6).Value=TrueThen
Callnsort(Sums)
打乱次序
ti=6
Label1(ti).Caption=timeGetTime-T
List2.Visible=False
List2.AddItemSums(i)
List2.Visible=True
成功对:
项数据进行了排序,用时:
Label1(ti).Caption&
毫秒"
ExitSub
PrivateSubCommand3_Click()
六种排序"
PrivateSubnsort(ByRefarrtosort()AsLong)
DimiAsLong,jAsLong,tmpAsLong
Fori=LBound(arrtosort)ToUBound(arrtosort)
j=(UBound(arrtosort)-i)*Rnd+i
Ifi<
>
jThen
tmp=arrtosort(i)
arrtosort(i)=arrtosort(j)
arrtosort(j)=tmp
Nexti
PrivateSubmpsort(ByRefarrtosort()AsLong)
经过n-1趟子排序完成的,它的时间复杂度为O(n^2)
优点:
1.“编程复杂度”很低,很容易写出代码;
2.具有稳定性
DimiAsLong,jAsLong,MAsLong,tmpAsLong
M=UBound(arrtosort)
m等于数组上标
DoWhileM
至m等于数组下标
j=M-1
M=0
IfblnSortThen
Fori=0Toj
Ifarrtosort(i)>
arrtosort(i+1)Then
找到后者大于前者地数
tmp=arrtosort(i)
两者互换
arrtosort(i)=arrtosort(i+1)
arrtosort(i+1)=tmp
M=i
从该位置开始继续查找
Ifarrtosort(i)<
arrtosort(i+1)Then
M=i
Loop
PrivateSubinsort(ByRefarrtosort()AsLong)
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据
算法适用于少量数据的排序,时间复杂度为O(n^2)。
是稳定的排序方法。
DimiAsLong,jAsLong,kAsLong,MAsLong,tmpAsLong
M=UBound(arrtosort)
Fori=0ToM
从数组下标到数组上标
Forj=i+1ToM
从数组的后一位开始
Ifarrtosort(j)<
arrtosort(i)Then
后者大于前者
tmp=arrtosort(j)
Fork=jToi+1Step-1
往后移动数组
arrtosort(k)=arrtosort(k-1)
Nextk
arrtosort(i)=tmp
插入该数
Nextj
Forj=i+1ToM
Ifarrtosort(j)>
arrtosort(i)Then
Fork=jToi+1Step-1
arrtosort(i)=tmp
PrivateSubQuickSort(lngLAsLong,lngRAsLong)
快速排序,lngL,lngR
需排序数组的下标,上标
快速排序(Quicksort)是对冒泡排序的一种改进。
由C.A.R.Hoare在1962年提出。
它的基本思想是:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小
然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
i=lngL
j=lngR
M=Sums((i+j)\2)
tmp=tCenter(Sums(i),M,Sums(j))
取轴枢,既作为比较的那个数
Whilei<
j
lngRAndSums(i)<
tmp
求lngI使N(i)小于轴枢
i=i+1
Wend
Whilej>
lngLAndSums(j)>
求lngJ使N(j)大于轴枢
j=j-1
lngRAndSums(i)>
tmp
lngLAndSums(j)<
=jThen
不出错,交换N(i)和N(j)
M=Sums(i)
Sums(i)=Sums(j)
Sums(j)=M
IflngL<
jThen:
CallQuickSort(lngL,j)
改变位置,递归调用
lngRThen:
CallQuickSort(i,lngR)
PrivateFunctiontCenter(aAsLong,bAsLong,CAsLong)AsLong
取三者中的中间项
Ifa>
bThen
a>
b
Ifb>
CThen
b>
c
tCenter=b
Else
bc>
=b
=ba>
tCenter=C
=bc>
a
tCenter=a
=a
=aa>
=ac>
=ab>
=a
c>
EndFunction
PrivateSubselctsort(ByRefarrtosort()AsLong)
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,
直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。
DimiAsLong,jAsLong,MAsLong,kAsLong,tmpAsLong
从数组下标开始到数组上标
k=i
从后一位开始比较
arrtosort(k)Then:
k=j
挑出最小的数字