选择法排序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XXX
主页
数组应用的一个重要内容:排序与查找
排序:将一组数按递增或递减的次序排列
查找:从数组中查找所需的数据
排序
选择法排序 冒泡法排序
……
顺序查找 折半查找 ……
查找
主页
例6.10 选择排序法
随机产生十个10~100的整数,用“选择排序法”按值从小 到大顺序排序,最后输出结果。 (1)利用Int(91*Rnd+10)产生值为10到100的随机整数 (2)按值从小到大进行排序。
程 序 结 构 For i=1 to 3 For j=i+1 to 4 …… Next j Next i
假设要对4 个数排序
两重循环 对4个数排序 外循环 i 次数为3 内循环 j 次数为i+1~4
循环体
比较a(i)与a(j) 若a(i)大于a(j) 则a(i)与a(j)交换值 主页
(3) 程序结构
完成上述比较及排序处理过程,可以采用两重循环结构, 外循环的循环变量i从1到9,共循环九次;内循环的循环变量j 从i+1到10。 本例采用默认的用户界面,所需数据由随机函数产生,处 理后结果信息通过Print方法直接输出在窗体上。 Private Sub Form_Load() Show Randomize Dim a(1 To 10) As Integer Print "原始数据:" For i = 1 To 10 '产生10个随机数 a(i) = Int(91 * Rnd + 10) Print a(i); Next i
'交换位置
Βιβλιοθήκη Baidu
主页
改写中间程序段“For i=1 To 9”~“Next i”(共7个程序 行)
For i = 1 To 9 k=i 'k用来记录每次选择的最小值的下标 For j = i + 1 To 10 例6.10a If a(k) > a(j) Then k=j End If Next j t = a(k): a(k) = a(i): a(i) = t '交换位置 Next i 变量k记录每一次选出的最小值的下标,在本次比较结束 后,使a(i)与a(k)一次换位即可
主页
主页
主页
Print: Print For i = 1 To 9 For j = i + 1 To 10 If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Next i Print "排序结果:" For i = 1 To 10 例6.10 Print a(i); Next i End Sub
排序方法: 将10个数放入数组a中,对下列下标变量进行排序处理: a(1), a(2), a(3), … , a(8) , a(9) , a(10)
① 从这10个下标变量中,选出最小值,通过交换把该值存入a(1)中
② 除a(1)之外(a(1)已存放最小值),从其余9个下标变量中选出最小值(即10 个数中的次小值),通过交换把该值存入a(2)中 ③ 选出a(3)~a(10)中的最小值,通过交换,把该值存入a(3)中
④ 重复上述处理,至a(8),可使a(1)~a(8)按小到大排列 ⑤ 第9次处理,选出a(9)及a(10)中的最小值,通过交换把该值存入a(9)中, 此时a(10)存放的就是最大值 主页
排列要求 示例:
小 大 a(1) a(2) a(3) a(4) 90 64 61 59 1. a(1)与a(2) ~a(4)比较,选出最小值,结果 59 64 61 90 2. a(2)与a(3) ~a(4)比较,选出次小值,结果 59 61 64 90 3. a(3)与a(4)比较,选出较小值,结果 59 61 64 90 i=1 j=2, 3, 4 i=2 j=3, 4 i=3 j=4
主页
数组应用的一个重要内容:排序与查找
排序:将一组数按递增或递减的次序排列
查找:从数组中查找所需的数据
排序
选择法排序 冒泡法排序
……
顺序查找 折半查找 ……
查找
主页
例6.10 选择排序法
随机产生十个10~100的整数,用“选择排序法”按值从小 到大顺序排序,最后输出结果。 (1)利用Int(91*Rnd+10)产生值为10到100的随机整数 (2)按值从小到大进行排序。
程 序 结 构 For i=1 to 3 For j=i+1 to 4 …… Next j Next i
假设要对4 个数排序
两重循环 对4个数排序 外循环 i 次数为3 内循环 j 次数为i+1~4
循环体
比较a(i)与a(j) 若a(i)大于a(j) 则a(i)与a(j)交换值 主页
(3) 程序结构
完成上述比较及排序处理过程,可以采用两重循环结构, 外循环的循环变量i从1到9,共循环九次;内循环的循环变量j 从i+1到10。 本例采用默认的用户界面,所需数据由随机函数产生,处 理后结果信息通过Print方法直接输出在窗体上。 Private Sub Form_Load() Show Randomize Dim a(1 To 10) As Integer Print "原始数据:" For i = 1 To 10 '产生10个随机数 a(i) = Int(91 * Rnd + 10) Print a(i); Next i
'交换位置
Βιβλιοθήκη Baidu
主页
改写中间程序段“For i=1 To 9”~“Next i”(共7个程序 行)
For i = 1 To 9 k=i 'k用来记录每次选择的最小值的下标 For j = i + 1 To 10 例6.10a If a(k) > a(j) Then k=j End If Next j t = a(k): a(k) = a(i): a(i) = t '交换位置 Next i 变量k记录每一次选出的最小值的下标,在本次比较结束 后,使a(i)与a(k)一次换位即可
主页
主页
主页
Print: Print For i = 1 To 9 For j = i + 1 To 10 If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Next i Print "排序结果:" For i = 1 To 10 例6.10 Print a(i); Next i End Sub
排序方法: 将10个数放入数组a中,对下列下标变量进行排序处理: a(1), a(2), a(3), … , a(8) , a(9) , a(10)
① 从这10个下标变量中,选出最小值,通过交换把该值存入a(1)中
② 除a(1)之外(a(1)已存放最小值),从其余9个下标变量中选出最小值(即10 个数中的次小值),通过交换把该值存入a(2)中 ③ 选出a(3)~a(10)中的最小值,通过交换,把该值存入a(3)中
④ 重复上述处理,至a(8),可使a(1)~a(8)按小到大排列 ⑤ 第9次处理,选出a(9)及a(10)中的最小值,通过交换把该值存入a(9)中, 此时a(10)存放的就是最大值 主页
排列要求 示例:
小 大 a(1) a(2) a(3) a(4) 90 64 61 59 1. a(1)与a(2) ~a(4)比较,选出最小值,结果 59 64 61 90 2. a(2)与a(3) ~a(4)比较,选出次小值,结果 59 61 64 90 3. a(3)与a(4)比较,选出较小值,结果 59 61 64 90 i=1 j=2, 3, 4 i=2 j=3, 4 i=3 j=4