- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数组应用之排序 选择法排序 (1)???? 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置; (2)???? 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置; (3)???? 以此类推,最后构成递增序列。 例: 排序运动员的成绩 已知8名运动员100米成绩,请排出他们的名次(成绩相同名次相同,成绩由键盘输入) 本题的难点并不在排序,可以很轻松地用冒泡法或选择法排序进行成绩从小(快)到大(慢)的排列。问题是排序后的成绩对应于哪一个运动员,一维数组是无法记录的。因此就要定义一个二维数组,其中第一列放运动员的成绩,第二列存放成绩对应的运动员号。按二维数组的第一列排序后,产生交换不仅要交换第一列的数组元素,还要交换第二列的数组元素,这样运动员的编号就能跟着成绩“跑了”。在输出名次时,也要注意成绩相同、名次相同的问题。 排序过程(选择法排序) Private Sub sort(cj() As Single) Dim temp As Single For i = 1 To 7 For j = i + 1 To 8 If cj(i, 1) cj(j, 1) Then temp = cj(i, 1): cj(i, 1) = cj(j, 1): cj(j, 1) = temp temp = cj(i, 2): cj(i, 2) = cj(j, 2): cj(j, 2) = temp End If Next Next End Sub 输出名次过程 Private Sub output(cj() As Single) Dim j As Integer, p As Integer p = 1 Print 第; 1; 名是; cj(1, 2); 号运动员,成绩是:; cj(1, 1) For j = 2 To 8 If cj(j, 1) = cj(j - 1, 1) Then Print 第; p; 名是; cj(j, 2); 号运动员,成绩是:; cj(j, 1) Else Print 第; j; 名是; cj(j, 2); 号运动员,成绩是:; cj(j, 1) p = j End If Next Print End Sub 窗体事件过程 ’ 输入运动员成绩 Private Sub Form_Click() Dim i As Integer Dim pro As String, cj(8, 2) As Single Randomize For i = 1 To 8 pro = 请输入第 + Str(i) + 位运动员的成绩: cj(i, 1) = InputBox(pro) cj(i, 2) = i Print cj(i, 1); Next Print Print Call sort(cj) Call output(cj) End Sub 快速排序 快速排序由霍尔 (Hoare) 提出,它是一种对冒泡排序的改正。由于其排序速度快,故称快速排序 (quick sort) 。快速排序方法的实质是将一组关键字 [K 1 ,K 2 ,…,K n ] 进行分区交换排序。 快速排序 算法思路 ①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。 ②将右区首、尾指针 ( 记录的下标号 ) 保存入栈,对左区进行与第①步相类似的处理,又得到它的左子区和右子区,控制字居中。 ③重复第①、②步,直到左区处理完毕。然后退栈对一个个右子区进行相类似的处理,直到栈空。 快速排序 试用 [6,7,5 1 ,2,5 2 ,8] 进行快速排序。排序过程简述如下:?6 ???7 ??51?? 2 ??52 ?8?? ???初始状态[52 ??7 ??51]? 6 ?[7 ??8] [2]??52 ?[51] ?6 ??7 ?[8] [2? ?52???51 ??6 ??7 ??8]???? 最后状态 从这个例子可以分析出快速排序法的稳定性问题,其中51和52表示
文档评论(0)