
课件22张PPT。排序问题 1、冒泡法(起泡法) 2、顺序交换法 3、选择法 4、插入法 1、冒泡法首先我们来看把最大的那个数放在最后位置上的方法: 假设有5个数,分别为10,2,6,7,4,存放在a(1)-a(5)中。 首先,从a(1)到a(5),相邻的两数两两进行比较,在每次比较过程中,若前一个数比后一个数大,则交换两元素的内容。第一轮的比较过程: for j=1 to 4 if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1) : a(j+1)=t End if Next j1、冒泡法现在重复上述算法:把a(1)到a(4)中的最大数放在a(4)中,a(1)到a(3) 中的最大数放在a(3)中,a(1)与a(2) 中的最大数放在a(2)中。这样一共经过4次选大就把a(1)到a(5)中的数进行由小到大排序。 在排序过程中小数象气泡一样上浮,而大数逐个下沉,所以叫起泡法。第1轮: for j=1 to 4 if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1) : a(j+1)=t End if Next j 第2轮: for j=1 to 3 if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1) : a(j+1)=t End if Next j 第3轮: for j=1 to 2 if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1) : a(j+1)=t End if Next j 第4轮: for j=1 to 1 if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1) : a(j+1)=t End if Next j第i轮: for j=1 to 5-i if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1): a(j+1)=t End if Next jFor i=1 to 4Next i1.冒泡法冒泡法程序清单: Dim a(1 To 5) As Integer For i = 1 To 5 a(i) = Val(InputBox("输入一个数")) Next i For i=1 to 4 For j=1 To 5-i if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1): a(j+1)=t End if Next j Next i For i = 1 To 5 Print a(i); Next i冒泡排序思考:如果这5个数是2,4,6,7,10,简述程序执行流程。1.冒泡法改进算法: Dim a(1 To 5) As Integer For i = 1 To 5 a(i) = Val(InputBox("输入一个数")) Next i For i=1 to 4 flag=0 For j=1 To 5-i if a(j)>a(j+1) Then t=a(j): a(j)=a(j+1): a(j+1)=t: flag=1 End if Next j If flag=0 Then Exit For Next i For i = 1 To 5 Print a(i); Next i1.冒泡法对已知存放在数组中的n个数,用冒泡法按递增顺序排序。 (1) 从第一个元素开始,将相邻的数比较,若为逆序,就交换,比较完一轮,最大的数已沉底,成为数组中的最后一个元素a(n) (2) 对a(1)和a(n-1)的n-1个数进行同(1)的操作,次大的数放入a(n-1)中,完成第二轮排序。 (3) 进行n-1轮排序,所有的数排序完毕。1.冒泡法n个数冒泡法递增排序程序清单: Dim a%(), i%, j%, n% n = InputBox("请输入一个正整数") ReDim a(1 To n) For i = 1 To n a(i) = Int(Rnd * 100) : Print a(i); Next i For i = 1 To n - 1 For j = 1 To n - i If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j Next i Print For i = 1 To n Print a(i); Next i2、顺序交换法我们再来看一种将最小的数放在第一个位置的算法 先设定用a(1)存放最小值,然后用a(1)分别与其后的每一个数a(j)(j=2..5)进行比较,在比较过程中如果a(1)不是小的数,就将a(1)与a(j)互换。第一轮的比较过程 For j=2 To 5 if(a(1)>a(j)) Then t=a(1) : a(1)=a(j) : a(j)=t End if Next j2、顺序交换法现在重复上述算法:把a(2)到a(5)中的最小数放在a(2)中,a(3)到a(5)中的最小数放在a(3)中,a(4)与a(5)中的最小数放在a(4)中。这样一共经过4次选小就把a(1)到a(5)中的数进行由小到大排序。第1轮: for j=2 to 5 if a(1)>a(j) Then t=a(1): a(1)=a(j) : a(j)=t End if Next j 第2轮: for j=3 to 5 if a(2)>a(j) Then t=a(2): a(2)=a(j) : a(j)=t End if Next j 第3轮: for j=4 to 5 if a(3)>a(j) Then t=a(3): a(3)=a(j) : a(j)=t End if Next j 第4轮: for j=5 to 5 if ... ...
~~ 您好,已阅读到文档的结尾了 ~~