1 to 5 - 西南石油大学.PPT
文本预览下载声明
选择法 相邻两个元素进行比较,记下较大元素的下标 当前元素与上次比较后的最大元素进行比较 确定完毕的元素的互换是在每一轮完成后进行 特点 比较交换法 (以降序为例):将第一个元素顺序与其后面的元素比较,比第一个大则进行交换,第一轮完毕后,最大的元素被挪到了第一个位置,第二轮从第二个元素开始重复上面的过程,结束后得到第二个最大的元素,如此下去经过 N-1 轮的比较,可将 N 个数排好。 第 一 轮 比 较 : 1 2 3 5 4 2 1 3 5 4 3 1 2 5 4 5 1 2 3 4 5 1 2 3 4 第一轮结束,找到最大值 5 第 二 轮 比 较 : 5 1 2 3 4 5 2 1 3 4 5 3 1 2 4 5 4 1 2 3 第二轮结束,找到第二最大值 4 for i=1 to N-1 Next i for (j=i+1 to N) if (S(j) S(i))then t=S(i):S(i)=S(j):S(j)=t End if Next j 冒泡法 (以升序为例):将相邻两个数比较,把小数对调到前边,如此进行一轮后,就会把最大的数互换到最后,再进行一次,则会把第二大数排在倒数第二的位置上,进行N-1次后,整个数列即可排好。 8 6 9 3 2 7 原始数据 8 6 9 3 2 7 8 6 9 2 3 7 8 6 2 9 3 7 8 2 6 9 3 7 2 8 6 9 3 7 第一轮排序 For i = 1 To n - 1 Next i For j = n To i+1 step -1 If a(j) a(j - 1) Then t = a(j) a(j) = a(j - 1) a(j - 1) = t End If Next j 人数不定情况下,如何排序? Dim a( ) as integer n=val(inputbox(“请输入项数”)) Redim a(1 to n) as integer For i = 1 to n a(i) = val(inputbox(“输入成绩”)) Next I For i = 1 to n-1 Next i For j = n to i+1 step -1 If a(j)a(j-1) then t=a(j) a(j)=a(j-1) a(j-1)=t End if Next j For i = 1 to n print a(i); Next i 查询 For i=1 to 15 If a(i)=m then exit for Next i If i15 then print “数组中没有” Else print a(i) Endif 有没有效率更高的查询方式? -123 -10 5 8 30 56 59 66 90 518 有序数组a,查找数据59 high low mid=Int((low+high)/2) 适合条件:数据有序 查找—折半查找 Dim a As Variant a = Array(-123, -10, 5, 8, 30, 56, 59, 66, 90, 518) n = UBound(a) k = Val(InputBox(输入要查询的关键值)) low = 1: high = n find = -1 find=-1表示没有找到 While low = high And find = -1 m = (low + high) \ 2 If k = a(m) The
显示全部