a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 88|回复: 0

[C语言] 计算机二级VB常用算法:选择法排序

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
选择法排序
1 U$ }, \( v: X) @' F1 B: h$ }  (1) 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;
8 f, C1 Q; L) G, c+ t: E  (2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;
2 v  Z' B( e0 w% R, V3 `, g& t9 z  (3) 以此类推,最后构成递增序列。
5 ?: c$ I. }# e8 S4 H# x3 |  譬如:
6 @5 ]2 m+ }: o" t4 f! T  8 6 9 3 2 78 ?) f' l( W, ^# i5 D' m) C2 f2 j
  第一轮交换后 2 6 9 3 8 7% D% r" h  [4 s0 ]' U
  第二轮交换后 2 3 9 6 8 78 I6 T% E5 F- Y
  第三轮交换后 2 3 6 9 8 77 ]9 L2 |6 ^& O* \" Z) g3 @
  第四轮交换后 2 3 6 7 8 9
+ i0 r9 Q$ ]; w2 E  n3 [) |  第五轮无交换 2 3 6 7 8 9
% A, e: y2 |  A2 P4 h7 ~9 i$ T; X  程序代码如下:, S" ?; s' U. S3 W  @/ j' [
以下是引用片段:
3 A& v& f  V4 \, p  PRivate Sub xzPaiXu(a() As Double, sheng As Boolean)
8 B: ^# N; c8 I; P  'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。
- r& ^, v' e. A+ \8 S' `3 {  Dim i As Integer, j As Integer 2 F; T' I$ b0 P" ~
  Dim temp As Double & p0 a# G7 O( M, s3 B" g7 p
  Dim m As Integer
  G3 @% I- b' q  ?  For i = LBound(a) To UBound(a) - 1 '进行数组大小-1轮比较 ' x  d1 E$ E7 e& t
  m = i '在第i轮比较时,假定第
: u7 j6 A3 ?0 W$ o, a6 G  'i个元素为最值元素 , z7 y: ~% e; y* k; f6 u
  For j = i + 1 To UBound(a) '在剩下的元素中找出最
) h  F1 i# Z( Z/ n. a8 }  '值元素的下标并记录在m中
4 v* c* @# X0 d% `6 \+ J  If sheng Then '若为升序,则m记录最小元素 " r! z) ~/ l# o* J. d
  '下标,否则记录最大元素下标
3 h& _2 z/ J5 _# T# N2 s  If a(j) < a(m) Then m = j
, m% ?- V$ _  e2 m2 E- ~! `4 U  Else - `% [, y  x0 G# Z
  If a(j) > a(m) Then m = j
: R( S5 |! F9 ?2 A6 p1 c  End If 4 j/ A9 W. s* {: p
  Next j '将最值元素与第i个元素交换 7 F- f& A! x' w9 y/ B5 r: f
  temp = a(i) # u7 z. [. p% u3 D3 U
  a(i) = a(m) 4 t: w0 r0 |/ G# C) {( `- f
  a(m) = temp
& `) z/ |1 f9 T7 ~" I2 ^  Next i 5 Y" r$ \4 l" r) x1 w1 D
  End Sub , H! W0 o4 C8 ]. T4 G
  调用该过程示例: * y- V5 v/ y  P0 a1 ]9 g
  Option Base 1 7 P3 S# C6 e" g1 i
  Private Sub Command1_Click() 7 @# y% Q) b( d8 ?8 u9 n
  Dim b(6) As Double ) d  f# L/ M2 V
  b(1) = 8
+ h% z+ P( A3 ], e6 W  b(2) = 6
! W* a' f8 Z" c$ g  b(3) = 9 8 d' T% R# ]& F, r
  b(4) = 3   x3 k' i, O2 N! v% ?
  b(5) = 2 7 G* l6 x0 _1 X* S, ^: r% V
  b(6) = 7 4 K% o, O& l, k$ E
  Call xzPaiXu(b, True) / I, n* ?+ i& _. m
  For i% = 1 To 6 * k- s* l+ |# \* J
  Print b(i) 8 ]- I) U8 p5 n8 {+ Z% l# o
  Next - @- ?2 c) Z; T$ G; c
  End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-11 11:05 , Processed in 0.169440 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表