发表日期: 2021-03-27 16:28:31 浏览次数:77
祁东申请400电话费用【祁东企业全国热线电话办理】祁东开通400电话电信价格、祁东微信公众号代运营外包托管、祁东网店编辑装修美工、祁东网站推广优化大概需要多少钱
祁东县,隶属湖南省衡阳市,地处衡阳市西南部、湘江中游北岸,东西狭长,北高南低,总面积1872平方千米。 [1] 截至2020年6月,祁东县下辖4个街道、17个镇、3个乡。 [2] 共368个行政村(社区居委会),总人口105.8万。
祁东县,因县城在祁山之东而得名。古为扬越之地,春秋时属楚国。祁东境内祁剧为全国优秀剧种之一。明朝重臣宁良、陈荐,清廷尚书陈大受,红军将领王如痴,革命志士曹炎,画家管锄非等都孕育于此。当前有祁东籍将军14人,两院院士2人,省部级领导7人,司级领导78人,处级领导1300多人。
湘桂铁路、娄底—衡阳高速公路、泉州—南宁高速公路、祁永高速穿过祁东境内,另有祁东港归阳港区。 [1] 祁东县是“中国黄花之乡”、“将军之乡”、“黑色金属之乡”、“中国曲艺之乡”、“省级文明县城”、“全省城乡环境卫生十佳县”。2018年4月23日,湖南省政府批准祁东县退出贫困县序列。
归并排序的另一项重要任务是将一个表均分为两个表,或者,如果原表的长度为奇数,就分为长度只相差1的两个表。要完成这一工作,一种方式是数出表中元素的数目,然后除以2,并在表的中点将其拆分。我们将给出一个简单的递归函数split
,将这些元素“处理”进两个表,其中一个表由第1个、第3个、第5个等元素组成,而另一个表则由偶数位置的元素组成。更确切地说,split
函数会将偶数编号的元素从作为参数给出的表中删除,并返回一个由这些偶数编号元素组成的新表。
split
函数的C语言代码如图2-27所示,它的参数是LIST
类型的表,这样定义是和merge
函数有关的。请注意,局部变量pSecondCell
被定义为LIST
类型。这里是将pSecondCell
用作指向表第二个单元(而不是指向表本身)的指针,不过其实LIST
类型当然是指向单元的指针。
LIST split(LIST list) { LIST pSecondCell;(1) if (list == NULL) return NULL;(2) else if (list->next == NULL) return NULL; else { /* there are at least two cells */(3) pSecondCell = list->next;(4) list->next = pSecondCell->next;(5) pSecondCell->next = split(pSecondCell->next);(6) return pSecondCell; } }复制代码
图 2-27 将表均分为两部分
split
是个具有副作用的函数。它会从作为参数给出的表中删除偶数位置的单元,而且它会将这些单元组合成一个作为该函数返回值的新表。
我们能以如下形式,用归纳的方式描述该分割算法。它对表的长度进行了归纳,这段归纳具有多个依据情况。
依据。如果表的长度为0或1,那么我们什么都不用做。这就是说,空表会被“分割成”两个空表,而只有一个元素的表,在分割时会将唯一的元素留在给定的表中,并返回一个空的偶数编号元素表(因为原表没有偶数编号的元素,所以这个表中没有元素)。该依据是由图2-27所示程序的第(1)行和第(2)行处理的。第(1)行处理的是list
为空的情况,而第(2)行处理的则是list
中只含一个元素的情况。请注意,我们在第(2)行中会避免去检查list->next
,除非之前在第(1)行中已经确定list
不为NULL
。
归纳。归纳步骤适用于list
中至少存在两个元素的情况。第(3)行中局部变量pSecondCell
中存放了指向表第二个单元的指针;第(4)行则是使第一个单元的next
字段跳过第二个单元,直接指向第三个单元,或者,如果表中只有两个单元,就变为NULL
;在第(5)行,我们对除前两个元素之外的整个表递归地调用split
函数;而split
函数会在第(6)行返回一个指向第二个单元的指针,该指针让我们可以访问由原表中所有偶数编号的元素组成的链表。
split
带来的变化如图2-28所示。原始指针用虚线表示,而新指针用实线表示。我们还指出了创建每个新指针的代码行编号。
图 2-28 split
函数的动作
递归的排序算法如图2-29所示,该算法可以通过以下依据与归纳步骤来描述。
LIST MergeSort(LIST list) { LIST SecondList;(1) if (list == NULL) return NULL;(2) else if (list->next == NULL) return list; else { /* 表中至少有两个元素 */(3) SecondList = split(list); /* 请注意,这样做的副作用是有一半元素会从表中删除 */(4) return merge(MergeSort(list), MergeSort(SecondList)); } }复制代码
图 2-29 归并排序算法
依据。如果待排序的表为空或长度为1,那么只要返回该表即可,因为它是已排序的。该依据是由图2-29中的第(1)行和第(2)行处理的。
归纳。如果待排序表的长度至少为2,那么在第(3)行使用split
函数,从list
中删除偶数编号的元素,并使用这些被删除的元素组成另一个表,该表是由局部变量SecondList
指向的。第(4)行会递归地为大小减半的表排序,并返回这两个表的归并结果。
让我们用归并排序为一列一位数数字742897721排序。为求简洁,我们再次省略了数字之间的逗号。首先,通过MergeSort
函数第(3)行中对split
的调用,表会被分为两个部分。生成的两个表中有一个是由奇数位置的元素组成,另一个则由偶数位置的元素组成。也就是说,这里有list
=72971,而SecondList
=4872。在第(4)行,这两个表会被排序,结果就成了表12779和2478,然后就会合并成已排序表122477789。
不过,这两个大小减半的表的排序工作并不是凭空进行的,而是通过对该递归算法的合理应用做到的。一开始,如果作为MergeSort参数的表长度大于1,那么MergeSort就会将其分割。图2-30a展示了对表进行递归分割,直到每个表的长度都成1为止。然后分割的表会成对地合并起来,沿着树结构向上,直到整个表完成排序。这个过程如图2-30b所示。不过,值得注意的是,分割和合并操作是交替进行的,而不是在完成所有分割工作后再进行合并。例如,第一半表72971会在开始处理第二半表4872前被完全分割及合并。
图 2-30 递归的分割和合并
祁东申请400电话费用【祁东企业全国热线电话办理】祁东开通400电话电信价格、祁东微信公众号代运营外包托管、祁东网店编辑装修美工、祁东网站推广优化大概需要多少钱
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: https://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878