41数组一排序问题 例411用选择法完成10个随机数据的升序排序。 ConstN=10: Dim D(N)As Integer, 1%o, J%o, T%o Randomize Timer Forl=1 To n D(D)=Rnd*100: Print d(;"排序前的数据序列 Next I 找最小数据作为第1个数据: Print: Print ForI=1ToN-1挑出前N-1个小的数 I=1 ForJ=I+I To N ForJ=2T0N这里2等价H+1 IfD()>D(J)Then数据元素交换IrD(1)>DJ)Then T=DO: D=D(): D()=T T=D(1):D(1)=D(J):D(J)=T End If End iif Next J Next J Next I ForI=1ToN输出排序结果 选择法排序 Print D(; 164211971563555333 Next I 591116334253556371 返回目录
4.1 数组-排序问题 [例4.11] 用选择法完成10个随机数据的升序排序。 Const N = 10 : Dim D(N) As Integer,I%, J%, T% RandomizeTimer For I = 1 To N D(I) = Rnd * 100:Print D(I); '排序前的数据序列 Next I Print:Print For I = 1 To N - 1 '挑出前N-1个小的数 For J = I + 1 To N If D(I) > D(J) Then '数据元素交换 T = D(I) : D(I) = D(J) : D(J) = T End If Next J Next I For I = 1 To N '输出排序结果 Print D(I); Next I 返回目录 找最小数据作为第1个数据: I = 1 For J = 2 To N '这里2等价I+1 If D(1) > D(J) Then T = D(1): D(1) = D(J): D(J) = T End If Next J
41数组一排序问题 2.选择法排序(N个数据升序) 1)第1轮比较:从第1个元素开始,两两相邻比较到N-1,值大 的放在后面。比较完毕,最大的数成为第N个元素(沉底)。 2)第2轮比较:从第1个元素开始,两两相邻比较到N-2,值大 的放在后面。比较完毕,最大的数成为第N-1个元素 3)依此类推,直至最后一次比较。 第1轮比较: 第2轮比较 原序列:30,20,10,90,50,60原序列:20,10,30,50,60,90 第1次比较结果:20,30,10,90,50,60第次比较结果:10,20,30,50,60,90 第次比较结果:20,10,30.,90,50,60第2次比较结果:10,20,30,50,60,90 第3次比较结果:20,10,30,90,50,60第3次比较结果:10,20,30,50.60,90 第4次比较结果:20,10,30,50,90.60第4次比较结果:10,20,30,50,60,90 第5次比较结果:20,10,30,50,60,90 返回目录
4.1 数组-排序问题 2. 选择法排序(N个数据升序) 1)第1轮比较:从第1个元素开始,两两相邻比较到N-1,值大 的放在后面。比较完毕,最大的数成为第N个元素(沉底)。 2)第2轮比较:从第1个元素开始,两两相邻比较到N-2,值大 的放在后面。比较完毕,最大的数成为第N-1个元素。 3)依此类推,直至最后一次比较。 返回目录 第1轮比较: 原序列:30, 20, 10, 90, 50, 60 第1次比较结果:20, 30, 10, 90, 50, 60 第2次比较结果:20, 10, 30, 90, 50, 60 第3次比较结果:20, 10, 30, 90, 50, 60 第4次比较结果:20, 10, 30, 50, 90, 60 第5次比较结果:20, 10, 30, 50, 60, 90 第2轮比较: 原序列:20, 10, 30, 50, 60, 90 第1次比较结果:10, 20, 30, 50, 60, 90 第2次比较结果:10, 20, 30, 50, 60, 90 第3次比较结果:10, 20, 30, 50, 60, 90 第4次比较结果:10, 20, 30, 50, 60, 90
41数组一排序问题 例4121用冒泡法完成10个随机数的升序排序 Const N=10: Dim D(N) As Integer, I%, J%, T% Randomize timer Fori=lTo n 最大的数成为第N个元素(沉底): D()=Rnd*100: Print D() Next I ForJ=1ToN-1这里N-1等价I Print: Print If D()>D(+ 1)Then ForI=N-1To1Sep-1大数逐个沉底”T=D(J:D(J)=DJ+1):DJ+1)=T For=ITo I End if If D()>D(J+1)Then Next j T=D(J:D(J)=D(J+1):D(J+1)=T End if 冒泡法排序 Next J 6157097137194773817 Next I 6131517387071779497 ForI=1ToN‘输出排序结果 Print D(); Next I 返回目录
4.1 数组-排序问题 [例4.12] 用冒泡法完成10个随机数的升序排序 Const N = 10 : Dim D(N) As Integer, I%, J%,T% Randomize Timer For I = 1 To N D(I) = Rnd * 100: Print D(I); Next I Print: Print For I = N - 1 To 1 Step -1 '大数逐个"沉底" For J = 1 To I If D(J) > D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If Next J Next I For I = 1 To N '输出排序结果 Print D(I); Next I 返回目录 最大的数成为第N个元素(沉底): I = N - 1 For J = 1 To N-1 '这里N-1等价I If D(J) > D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If Next J