1、VB程序设计程序设计冒泡排序与选择排序冒泡排序与选择排序1.数组的概念:数组的概念:数组并不是一种数据类型,而是一组数组并不是一种数据类型,而是一组有序且具有相同数据类型的数据的集合。分为静态有序且具有相同数据类型的数据的集合。分为静态(定长定长)数组和动态数组和动态(可变长可变长)数组。数组。2.静态数组的定义方法:静态数组的定义方法:Dim 数组名数组名(下标下标1to下标下标n)As 类型类型 Dim 数组名数组名(元素个数元素个数)As 类型类型(下标从(下标从0开始)开始)3.数组的赋值与输入、输出方法:数组的赋值与输入、输出方法:通过循环给数组元通过循环给数组元素赋值、输入、输出。
2、如:素赋值、输入、输出。如:For i=1 To 10 输入输入A数组的每个元素值数组的每个元素值 A(i)=inputbox(“请输入第请输入第”&i&“个元素个元素”)Next i 认识一维数组:认识一维数组:一、冒泡排序(升序)一、冒泡排序(升序)冒泡排序的基本原理是对存放原始数据的数组,冒泡排序的基本原理是对存放原始数据的数组,按同一方向进行多次扫描,每次扫描称为按同一方向进行多次扫描,每次扫描称为一趟一趟。当。当发现相邻两个数据的次序与排序要求的大小次序不发现相邻两个数据的次序与排序要求的大小次序不符合时,即将这两个数据互换符合时,即将这两个数据互换次序次序。这样,较小的。这样,较小
3、的数据就会逐个向前移动,较大的数据向后移动,好数据就会逐个向前移动,较大的数据向后移动,好像气泡向上浮起一样。像气泡向上浮起一样。如这样一组数据:如这样一组数据:“253630217”要求按照由小到大排列起来。要求按照由小到大排列起来。25253630217253021736原数据原数据第一趟排序结果第一趟排序结果3630213636736第一趟在相邻两数中比较大小,若为逆序则交换位置,最大数第一趟在相邻两数中比较大小,若为逆序则交换位置,最大数36放置第五位放置第五位25253630217253021736252173036原数据原数据第二趟排序结果第二趟排序结果第一趟排序结果第一趟排序结果
4、30217363030第二趟用相同方法在四个数中两两交换位置,次大数第二趟用相同方法在四个数中两两交换位置,次大数30放置第四位放置第四位25253630217253021736252173036原数据原数据217253036第三趟排序结果第三趟排序结果第二趟排序结果第二趟排序结果第一趟排序结果第一趟排序结果21730362525第三趟在三个数中两两交换位置,第三趟在三个数中两两交换位置,25放置倒数第三位放置倒数第三位21253630217253021736252173036原数据原数据217253036721253036第四趟排序结果第四趟排序结果第三趟排序结果第三趟排序结果第二趟排序结果
5、第二趟排序结果第一趟排序结果第一趟排序结果7253036217第四趟在两个数中比较,第四趟在两个数中比较,21放置第四位放置第四位若对若对8个数据用冒泡排序排列,流程图如图所示:个数据用冒泡排序排列,流程图如图所示:Dim R(1 to 8)as integerDim i as integer,j as integerFor i=to 8 输入无序数组 R(i)=inputbox(“输入第”&i&“个元素”)next iFor i=8 to 2 step 第几趟排序 For j=1 to -1 第几次比较 if R(j)R(j+1)then t=R(j):Rj)=R(j+1):R(j+1)=t
6、 数据交换 end if Next jNext iFor i=1 to 8 step 1 输出有序的数组 text1.text=text1.text&“&R(i)next i开始开始输入无序数组输入无序数组i=8i=2j=1jR(j+1)交换交换R(j)和和R(j+1)TTj=j+1Fi=i-1输出有序数组输出有序数组结束结束TFF1-1step二、选择排序法(升序)二、选择排序法(升序)从第1个元素开始在n个数中找出最小数与第1个元素交换位置从第2个元素开始在n-1个数中找出最小数与第2个元素交换位置在剩下的2个数据中选择最小数与第n-1个元素交换位置例如:例如:数组元素数组元素“25 36
7、 30 21 7”按照升序排列按照升序排列25253630217736302125原数据原数据第一趟排序结果第一趟排序结果3630217第一趟在第一趟在5个数中找出最小值个数中找出最小值7放在第一个位置放在第一个位置Min=25Min36Min30Min=21Min=77253630217736302125原数据原数据第一趟排序结果第一趟排序结果36302125第二趟在第二趟在4个数中找出最小值个数中找出最小值21放在第二个位置放在第二个位置Min=36Min=30Min=21Min25721721303625第二趟排序结果第二趟排序结果253630217736302125原数据原数据第一趟排
8、序结果第一趟排序结果303625第三趟在第三趟在3个数中找出最小值个数中找出最小值25放在第三个位置放在第三个位置Min=30Min36Min=25721721303625第二趟排序结果第二趟排序结果721253630第三趟排序结果第三趟排序结果25253630217736302125原数据原数据第一趟排序结果第一趟排序结果3630第四趟在第四趟在2个数中找出最小值放个数中找出最小值放30在第四个位置,最大数在第四个位置,最大数36自动归位自动归位Min=36Min=30721721303625第二趟排序结果第二趟排序结果721253630第三趟排序结果第三趟排序结果25721253036第四
9、趟排序结果第四趟排序结果3036Dim R(1 to 8)as integerDim i as integer,j as integer Dim n as integer,min as integer,m as integerFor i=1 to 8 输入无序数组 R(i)=inputbox(“输入第”&i&“个元素”)next iFor i=1 to 第几趟排序 min=:m=i For j=i+1 to 第几次比较 if then min=:m=找最小值 Next j k=:R(i)=min:R(m)=k 数据交换Next iFor i=1 to 8 step 1 输出有序的数组 text1.text=text1.text&“&R(i)next i8R(i)7R(j)minR(j)jR(i)开始开始输入无序数组输入无序数组i=1i=7j=i+1j=8R(j)minR(j)=min并记住下标并记住下标TTj=j+1Fi=i+1输出有序数组输出有序数组结束结束TFF交换数据交换数据记住当前元素下标,给记住当前元素下标,给min赋初值赋初值若对若对8个数据用选择排序排列,如图所示:个数据用选择排序排列,如图所示:谢谢观赏!谢谢观赏!