VB各种排序方法_第1页
VB各种排序方法_第2页
VB各种排序方法_第3页
VB各种排序方法_第4页
VB各种排序方法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

筛选法排序

21346

21346不交换交换

31246

41236交换交换

61234

6

1234交换

6

2134交换交换

6

3124

6

4123

6

4

123交换

6

4

213

6

4

312交换

6

4

312交换

6

4

3

2

1轮比较轮比较轮比较轮比较2021/6/271筛选法排序例:筛选法排序。(设从大到小排序)[分析]:将N个无序数据存放在数组中,对数组进行N-1轮扫视。第一轮扫视:将A(1)与A(2)比较,若A(1)<A(2),则交换A(1)和A(2)的值;再将A(1)与A(3)、A(4)……

A(N)依次按以上规则比较和交换,第一轮扫视完毕,N个数中最大数存放到A(1)中。第二轮扫视:将A(2)与A(3)、A(4)…A(N)依次按以上规则比较;第三轮扫视:将A(3)与A(4)、A(5)…A(N)依次按以上规则比较;第N-1扫视:将A(N-1)与A(N)按以上规则比较排序完成。2021/6/272筛选法排序假定待排序的N个数已存放在数组A中1.确定排序需要几轮的比较ForI=1ToN–1NextI1.确定排序需要几轮的比较2.进行每一轮的比较

ForJ=

To

NextJ1.确定排序需要几轮的比较2.进行每一轮的比较3.在每一轮比较中,比较两个数的大小,根据比较结果决定是否交换两个数IfA(I)<A(J)thenT=A(I)A(I)=A(J)A(J)=TEndIfI

+

1

NText1=Text1&Str(A(I))Text1=Text1&Str(A(N))2021/6/273筛选法排序返回2021/6/274用元素A(Pointer)去比较直接排序

24536I:1Pointer:1

64532交换Pointer:2交换Pointer:3不交换交换Pointer:5第一轮比较结束I≠Pointer则交换A(I)、A(Pointer)即交换A(1)和A(6)

64532第一轮比较第二轮比较I:2Pointer:2交换Pointer:3不交换不交换第二轮比较结束I≠Pointer则交换A(I)、A(Pointer)即交换A(2)和A(3)

6

5432第三轮比较

6

5

432I:3Pointer:3不交换不交换第三轮比较结束I=Pointer则不交换A(I)、A(Pointer)第四轮比较

6

5

4

32I:4Pointer:4不交换第四轮比较结束I=Pointer则不交换A(I)、A(Pointer)排序结束

6

5

4

3

22021/6/275直接排序设待排序的N个数存放在数组A中1.确定排序需要几轮的比较ForI=1ToN–1NextI1.确定排序需要几轮的比较2.设置这一轮指针初值Pointer=I1.确定排序需要几轮的比较2.设置这一轮指针初值3.开始一轮的比较ForJ=I+1ToNNextJIfA(Pointer)<A(J)ThenPointer=JEndIf1.确定排序需要几轮的比较2.设置这一轮指针初值3.开始一轮的比较4.进行比较,根据比较结果

决定是否改变指针的值1.确定排序需要几轮的比较2.设置这一轮指针初值3.开始一轮的比较4.进行比较,根据比较结果

决定是否改变指针的值5.一轮的比较结束后,根据指针的值与I是否不同,确定是否交换A(I)、A(Pointer)的值IfI<>OptionterThenT=A(I)A(I)=A(Pointer)A(Pointer)=A(I)EndIf2021/6/276直接排序返回2021/6/277冒泡法排序[分析]:(设从小到大排序)第一轮比较:将A(1)和A(2)比较,若A(1)>A(2)则交换这两个数组元素的值,否则不交换;然后再用A(2)和A(3)比较,处理方法相同;

以此类推,直到A(N-1)和A(N)比较后,这时A(N)中就存放了N个数中最大的数。第二轮比较:将A(1)和A(2)、A(2)和A(3),

A(N-2)和A(N-1)比较,处理方法和第一轮相同,这一轮比较结束后A(N-1)中就存放了N个数中第二小的数。第N-1轮比较:将A(1)和A(2)进行比较,处理方法同上,比较结束后,这N个数按从小到大的次序排列好。每一轮的比较后都会使小数逐渐浮起来,大数下沉,就象冒泡一样2021/6/278冒泡排序举例:对整数序列85243按升序排序8524352438243582345823458初始状态第一趟结果第二趟结果第三趟结果第四趟结果小的逐渐上升每趟沉下一个最大的8582483885243程序2021/6/279冒泡法排序一2021/6/2710冒泡排序举例:对整数序列85243按升序排序82345初始状态第一趟结果第二趟结果小的逐渐上升每趟沉下一个最大的8

238

48

58

885243234582021/6/2711冒泡法排序二(按降序排列)第一论扫视:1、6、5、4、3、26、1、5、4、3、26、5、1、4、3、26、5、4、1、3、26、5、4、3、1、26、5、4、3、2、1第二轮扫视:6、5、4、3、2、16、5、4、3、2、16、5、4、3、2、16、5、4、3、2、16、5、4、3、2、1发生交换,继续下一轮比较没发生交换,结束比较2021/6/2712Switch=TrueDoWhileSwitchSwitch=FalseN=N-1Loop冒泡法排序二1.设置一个控制循环开关,当某一轮比较中不发生数据交换时,使开关值为假,标志排序结束

N=N-1

1.设置一个控制循环开关,当某一轮比较中不发生数据交换时,使开关值为假,标志排序结束2.进行某一轮比较,若发生数据交换,设置开关值为真ForI=1ToNIfA(I)>A(I+1)ThenSwitch=TrueTem=A(I)A(I)=A(I+1)A(I+1)=TemEndIfNextI返回2021/6/2713Switch=TrueDoWhileSwitch

Loop冒泡法排序二1.进行某一轮比较,若发生数据交换,设置开关值为真ForI=1ToNIfA(I)>A(I+1)ThenSwitch=TrueTem=A(I)A(I)=A(I+1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论