计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

顺序存储的线性表中关键字数量有限的记录的排

2015-10-20 01:06
导读:计算机应用论文论文,顺序存储的线性表中关键字数量有限的记录的排样式参考,免费教你怎么写,格式要求,科教论文网提供的这篇文章不错: 摘 要 关于排序已经有许多成熟的算法,但对于一些特殊的问题
摘 要 关于排序已经有许多成熟的算法,但对于一些特殊的问题和有特殊要求的问题,已有的一些经典的排序算法却不一定能满足题目要求,本文就关键字数量有限的记录的排序问题提出了一个有效的算法。 关键词 排序;关键字;比较;交换1 引言 排序是计算机程序设计中的一种重要操作,它的功能是将一个或记录的任意序列重新按其关键字的某种次序(非递减或非递增顺序)排列起来,使其具有一定的顺序,以便于进行数据查找。通常,在排序过程中需进行下列两种基本操作:①比较两个关键字的大小;②将记录从一个位置移动到另一个位置。前一个操作对大多数排序方法来说都是必要的,而后一个操作则随着记录的存储方式和使用的排序方法的不同而有所不同。对于存储在线性表中的记录进行排序,其主要操作是要通过一系列的比较使不在正确位置上的记录通过交换操作使之到达正确的位置上,一次交换操作可以交换两条记录的位置,因此提高排序效率的很重要的一个方面就是尽量减少记录移动的次数。2 问题的提出 在实际问题中经常遇到这样一种特殊情况的排序,即对关键字个数有限的记录进行排序。例如,试图对某次竞赛的奖牌榜进行排序时就只有3个关键字,即:金牌、银牌和铜牌(或一等奖、二等奖和三等奖),所有的金牌获得者在最前面,随后是银牌获得者,最后是铜牌获得者。要对奖牌榜排成符合要求的顺序而又要求用最少的交换次数来实现,对类似这样的问题我们可以用下面的题目来描述: 对于一个给定的只含有3个关键字的记录序列,将其按非递减顺序排列,要求交换次数最少。现假设关键字只有1、2、3(当然也可以是其它数据,比如9、20、57等)一个顺序存储的线性表,设计一个算法将该顺序表按非递减排序,要求交换次数最少。3 算法分析 在众多排序算法中,选择法排序相对于其它排序方法来说,平均交换次数是最少的,尤其是在关键字杂乱无章的情况下使用选择法排序可以有效地减少交换次数。选择法的基本思想是:首先从序列中选择关键字最小的记录同第一条记录交换,再从余下的记录中选择关键字最小的与第二条记录交换,这样往复下去,直到全部记录排序完成。如对于如下的初始序列: 也就是原序列的第0条记录和第3条记录进行了交换操作,使原第3条记录到达了应该到达的正确位置,而原第0条记录到达了第3条记录的位置,但我们可以看出显然不是它应该到达的最终位置,所以至少还要需要一次交换操作才有可能使该记录最终到位。最终使上述序列排成非递减序列需要进行4次交换操作。其排序过程如下: 初始序列: 3 2 3 1 2 2 1 3 1 1 第一次交换后:1 2 3 3 2 2 1 3 1 1 第二次交换后:1 1 3 3 2 2 2 3 1 1 第三次交换后:1 1 1 3 2 2 2 3 3 1 第四次交换后:1 1 1 1 2 2 2 3 3 3 通过上述的分析,对关键字数量有限的记录排序,用选择法进行显然交换次数不是最少的。针对题目要求,如果我们在交换时尽可能地做到使两条记录同时到位,则交换次数肯定会少于选择法。 因为要排成非递减序列,所以关键字小的记录应该在序列的前半部分,而关键字大的记录应该在序列的后半部分。为此,我们可以按如下方法进行排序:假设a[low…high]是一维数组,我们让变量mid=(low high)/2;指针i、j作为控制搜索的变量,指针i用来在记录的前半部分搜索,指针j用来在记录的后半部分搜索;指针frontMax用来记录数组前半部分中关键字值最大的记录位置,每次搜索其初始值都为low,指向第一个记录位置;指针backMin用来记录数组后半部分中关键字值最小的记录的位置,每次搜索时其初始值都为high,指向最后一个记录的位置;变量exchangeNum记录交换的次数,其初始值为0。 排序的具体过程为:我们首先从序列的开始(第low条记录)在序列的前半部分搜索关键字值最大的记录,用变量frontMax来记录找到的关键字值最大的记录的位置;从序列的最后开始(第high条记录)在序列的后半部分中搜索关键字值最小的记录,用变量backMin记录序列后半部分中关键字值最小的记录位置。搜索完一遍后用frontMax指示的记录的关键字值a[frontMax]和backMin指示的记录的关键字值a[backMin]进行比较,若a[frontMax]
上一篇:谈中职计算机专业课程考核改革(1) 下一篇:没有了