a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 87|回复: 0

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

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
选择法排序& @" v' H& O+ x, F) A
  (1) 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;) P5 d9 a: J  E0 B2 X
  (2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;; ~% E9 i: F7 _) S9 U6 [6 j% ?
  (3) 以此类推,最后构成递增序列。
* R! Z) l8 N2 _1 ^6 D) x2 m+ J1 i  譬如:- n7 a6 z5 z6 J) d
  8 6 9 3 2 7
% D# {1 h0 s. n6 a$ {' ?  第一轮交换后 2 6 9 3 8 72 e: K: T4 V. H! `6 y  D4 M1 ~- E# f9 k
  第二轮交换后 2 3 9 6 8 7
$ J2 t5 T, ?5 L9 K$ ^  第三轮交换后 2 3 6 9 8 76 P. J: g9 J- ]6 q0 _% S  e8 d
  第四轮交换后 2 3 6 7 8 9
1 F5 [) I$ }. s' A0 G, f5 `  第五轮无交换 2 3 6 7 8 9
/ j5 Q) L' y/ y  ^; m3 j" k  程序代码如下:9 A! i" B7 J8 n$ w9 s3 t/ i3 F6 }
以下是引用片段:
5 c4 c8 o1 \% m  PRivate Sub xzPaiXu(a() As Double, sheng As Boolean) & H1 h3 i5 s( P
  'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。 5 a) M; m; E8 l" ^3 h/ C
  Dim i As Integer, j As Integer 5 m* z5 R# c- r  U2 ]
  Dim temp As Double : @  L- Q. c- h; N8 ?0 h
  Dim m As Integer # E( m4 [) C2 e/ F, ?( Y
  For i = LBound(a) To UBound(a) - 1 '进行数组大小-1轮比较 $ y5 U* q3 B9 j! d9 |( n/ E, J7 `
  m = i '在第i轮比较时,假定第
, \$ i& ?1 b# r6 `  'i个元素为最值元素
6 O$ u# w" \2 Q% M$ o) d' P  For j = i + 1 To UBound(a) '在剩下的元素中找出最
# F, n. n7 ^3 G# a3 {- K  '值元素的下标并记录在m中
! ?+ F, n; L+ z: o* P  If sheng Then '若为升序,则m记录最小元素
; W4 c4 G6 U. i: K  '下标,否则记录最大元素下标
: b; P7 f/ f$ S. l4 X! R  If a(j) < a(m) Then m = j " t0 }* |8 |7 c$ v# h6 ^
  Else
$ j& [+ B& g- u3 s  If a(j) > a(m) Then m = j 8 z# X& b, a/ m/ O
  End If & R- ]2 Z0 C4 o, T& K+ X4 g" {9 {
  Next j '将最值元素与第i个元素交换 # [* b5 U& U, [+ F
  temp = a(i)
' }: l2 J2 q" ?) }  a(i) = a(m)
: Q1 I2 M4 h8 o- [  a(m) = temp
( }9 ~& w& p1 {9 h$ s! v  Next i
) O+ u0 y8 m/ W/ w3 h  End Sub 2 _* t; {8 c& W0 ^& a7 s6 _
  调用该过程示例: 2 T) i; _2 l$ y) V" J
  Option Base 1
9 L1 \& K' k# p/ P) ^: z% r  Private Sub Command1_Click()
# h. U9 U5 v- v+ r; G3 M0 Y( x* Q  Dim b(6) As Double ! D0 R+ i) C% Y$ c& o
  b(1) = 8
& [6 k6 `- g& K7 L9 s  b(2) = 6 $ t9 \8 E3 l6 s; {& F
  b(3) = 9 & ^% x! i3 i# Q+ m
  b(4) = 3
+ A" E* r9 k9 E  b(5) = 2 * k- V5 O6 T  t4 k; Q* k2 i
  b(6) = 7 3 [' Y8 h7 f! ~2 W
  Call xzPaiXu(b, True)
' M: ?! z& o1 Q" u( o+ `  For i% = 1 To 6 , x3 S! i4 B" n, v( p
  Print b(i)
$ U$ Y4 P6 ]$ H  g  P( s# j/ D  Next & v* o  w2 |) n+ s4 ^' B
  End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 21:17 , Processed in 0.142790 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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