vb排序程序1资料.docx

上传人:b****1 文档编号:769883 上传时间:2023-04-30 格式:DOCX 页数:12 大小:18.25KB
下载 相关 举报
vb排序程序1资料.docx_第1页
第1页 / 共12页
vb排序程序1资料.docx_第2页
第2页 / 共12页
vb排序程序1资料.docx_第3页
第3页 / 共12页
vb排序程序1资料.docx_第4页
第4页 / 共12页
vb排序程序1资料.docx_第5页
第5页 / 共12页
vb排序程序1资料.docx_第6页
第6页 / 共12页
vb排序程序1资料.docx_第7页
第7页 / 共12页
vb排序程序1资料.docx_第8页
第8页 / 共12页
vb排序程序1资料.docx_第9页
第9页 / 共12页
vb排序程序1资料.docx_第10页
第10页 / 共12页
vb排序程序1资料.docx_第11页
第11页 / 共12页
vb排序程序1资料.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

vb排序程序1资料.docx

《vb排序程序1资料.docx》由会员分享,可在线阅读,更多相关《vb排序程序1资料.docx(12页珍藏版)》请在冰点文库上搜索。

vb排序程序1资料.docx

vb排序程序1资料

OptionExplicit

                                                                 

DimSums(9999)AsLong,Sumb(9999)AsLong                                     '生成数据数量可自己设置

PrivateblnSort AsBoolean                                                    '排序方向

PrivateDeclareFunctionSendMessageFindLib"User32"Alias"SendMessageA"(ByValhWndAsLong,ByValwmsgAsLong,ByValwparamAsInteger,ByVallparamAsString)AsLong

PrivateDeclareFunctiontimeGetTimeLib"winmm.dll"()AsLong

DimT           AsLong

PrivateSubCommand1_Click()

   DimiAsLong,zAsLong,jAsLong

   List1.Clear

   DoEvents

   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

   DoEvents

   Fori=0ToUBound(Sumb)

       Sums(i)=Sumb(i)

   Next

   blnSort=Option1(0).Value

   T=timeGetTime

   IfOption2(0).Value=TrueThen

       Callmpsort(Sums)                                                      '冒泡排序

       ti=0

   EndIf

   IfOption2

(1).Value=TrueThen

       Callinsort(Sums)                                                      '插入排序

       ti=1

   EndIf

   IfOption2

(2).Value=TrueThen

       CallQuickSort(LBound(Sums),UBound(Sums))                             '快速排序

       ti=2

   EndIf

   IfOption2(3).Value=TrueThen

       Callselctsort(Sums)                                                   '选择排序

       ti=3

   EndIf

   IfOption2(4).Value=TrueThen

       Callhirsort(Sums)                                                     '希尔排序

       ti=4

   EndIf

   IfOption2(5).Value=TrueThen

       Callduisort(Sums)                                                     '堆排序

       ti=5

   EndIf

   IfOption2(6).Value=TrueThen

       Callnsort(Sums)                                                       '打乱次序

       ti=6

   EndIf

   Label1(ti).Caption=timeGetTime-T

   List2.Visible=False

   DoEvents

   Fori=0ToUBound(Sums)

       List2.AddItemSums(i)

   Next

   List2.Visible=True

   Me.Caption="成功对:

"&UBound(Sums)+1&"项数据进行了排序,用时:

"&Label1(ti).Caption&"毫秒"

   ExitSub

EndSub

                                                                         

PrivateSubCommand3_Click()

   List1.Clear

   List2.Clear

   Me.Caption="六种排序"

EndSub

                                                                         

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

       EndIf

   Nexti

EndSub

                                                                         

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                                                      '从该位置开始继续查找

               EndIf

           Nexti

       Else

           Fori=0Toj

               Ifarrtosort(i)

                   tmp=arrtosort(i)

                   arrtosort(i)=arrtosort(i+1)

                   arrtosort(i+1)=tmp

                   M=i

               EndIf

           Nexti

       EndIf

   Loop

EndSub

                                                                         

PrivateSubinsort(ByRefarrtosort()AsLong)                                  '插入排序

   '插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据

   '算法适用于少量数据的排序,时间复杂度为O(n^2)。

是稳定的排序方法。

   DimiAsLong,jAsLong,kAsLong,MAsLong,tmpAsLong

   M=UBound(arrtosort)

   Fori=0ToM                                                             '从数组下标到数组上标

       IfblnSortThen

           Forj=i+1ToM                                                 '从数组的后一位开始

               Ifarrtosort(j)

                   tmp=arrtosort(j)

                   Fork=jToi+1Step-1                                 '往后移动数组

                       arrtosort(k)=arrtosort(k-1)

                   Nextk

                   arrtosort(i)=tmp                                         '插入该数

               EndIf

           Nextj

       Else

           Forj=i+1ToM

               Ifarrtosort(j)>arrtosort(i)Then

                   tmp=arrtosort(j)

                   Fork=jToi+1Step-1

                       arrtosort(k)=arrtosort(k-1)

                   Nextk

                   arrtosort(i)=tmp

               EndIf

           Nextj

       EndIf

   Nexti

EndSub

                                                                         

PrivateSubQuickSort(lngLAsLong,lngRAsLong)                              '快速排序,lngL,lngR 需排序数组的下标,上标

   '快速排序(Quicksort)是对冒泡排序的一种改进。

由C.A.R.Hoare在1962年提出。

   '它的基本思想是:

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小

   '然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

   DimiAsLong,jAsLong,MAsLong,tmpAsLong

   i=lngL

   j=lngR

   M=Sums((i+j)\2)

   tmp=tCenter(Sums(i),M,Sums(j))                                         '取轴枢,既作为比较的那个数

   Whilei

       IfblnSortThen

           Whilei

               i=i+1

           Wend

           Whilej>lngLAndSums(j)>tmp                                   '求lngJ使N(j)大于轴枢

               j=j-1

           Wend

       Else

           Whileitmp

               i=i+1

           Wend

           Whilej>lngLAndSums(j)

               j=j-1

           Wend

       EndIf

       Ifi<=jThen                                                         '不出错,交换N(i)和N(j)

           M=Sums(i)

           Sums(i)=Sums(j)

           Sums(j)=M

           i=i+1

           j=j-1

       EndIf

   Wend

   IflngL

CallQuickSort(lngL,j)                                  '改变位置,递归调用

   Ifi

CallQuickSort(i,lngR)

EndSub

                                                                         

PrivateFunctiontCenter(aAsLong,bAsLong,CAsLong)AsLong              '取三者中的中间项

   Ifa>bThen                                                              'a>b

       Ifb>CThen                                                          'a>b>c

           tCenter=b                                                        'b

       Else                                                                   'a>bc>=b

           Ifa>CThen                                                      'a>bc>=ba>c

               tCenter=C                                                    'c

           Else                                                               'a>bc>=bc>a

               tCenter=a                                                    'a

           EndIf

       EndIf

   Else                                                                       'b>=a

       Ifa>CThen                                                          'b>=aa>c

           tCenter=a                                                        'a

       Else                                                                   'b>=ac>=a

           Ifb>CThen                                                      'b>=ac>=ab>c

               tCenter=C                                                    'c

           Else                                                               'b>=a c>=ac>=b

               tCenter=b                                                    'b

           EndIf

       EndIf

   EndIf

EndFunction

                                                                    

PrivateSubselctsort(ByRefarrtosort()AsLong)                               '选择排序

   '每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,

   '直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法。

   DimiAsLong,jAsLong,MAsLong,kAsLong,tmpAsLong

   M=UBound(arrtosort)

   Fori=0ToM                                                             '从数组下标开始到数组上标

       k=i

       IfblnSortThen

           Forj=i+1ToM                                                 '从后一位开始比较

               Ifarrtosort(j)

k=j                     '挑出最小的数字

           Nextj

       Else

           Forj=i+1ToM

               Ifarrtosort(j)>arrtosort(k)Then:

k=j             

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2