发表日期: 2021-04-10 15:26:44 浏览次数:151
邯郸网站优化【邯郸开通400电话】邯郸网站搭建、邯郸微信公众号推文外包、邯郸开通京东拼多多设计、邯郸淘宝装修
邯郸,是河北省地级市,国务院批复确定的中国河北省南部地区中心城市 [1] 。截至2019年,全市下辖6个区、11个县、代管1个县级市,总面积12073.8平方千米,常住人口954.97万人,其中城镇人口555.36万人,城镇化率58.15%。 [2]
邯郸位于河北省南端、太行山东麓,西依太行山脉,东接华北平原,与晋、鲁、豫三省接壤,是晋冀鲁豫四省要冲和中原经济区腹心、华北地区重要的交通枢纽,京广铁路、京广高铁纵贯南北,邯长铁路、邯济铁路横跨东西,邯黄铁路直通黄骅港口 [111] ,京深高速公路、大广高速公路、太行山高速公路贯穿南北,青兰高速公路、邯大高速公路横跨东西,107国道、106国道、309国道、230国道(原定魏公路) [3] 及234国道、514国道 [4] (原邯临公路)、515国道(原沙曹公路) [112] 形成国省干线公路网,邯郸机场是国家重点发展的支线机场。 [5]
邯郸是国家历史文化名城,有3100年的建城史,8000年前孕育了新石器早期的磁山文化;战国邯郸为赵国都城,魏县为魏国都城;汉代与洛阳、临淄、南阳、成都共享“五大都会”盛名;邯郸临漳县先后为曹魏、冉魏、前燕、东魏、北齐都城;北宋,大名府成为北宋陪都;清代,大名府为直隶省第一省会。 [6-9]
邯郸是国家园林城市、中国优秀旅游城市、全国绿化模范城市、全国双拥模范城市、全国社会治安综合治理优秀城市和中国成语典故之都,拥有涉县娲皇宫、广府古城2处5A级景区。
键排序
在排序时,我们会对要排序的值进行比较操作。通常只对值的特定部分进行比较,而用于比较的这个部分就称为键。
例如,课表可能是具有如下形式的C语言结构体数组
Astruct STUDENT { int studentID; char *name; char grade;} A[MAX];复制代码我们可能希望通过学号、学生姓名或所在年级来排序,每项内容都可以作为键。例如,如果我们希望通过学号为结构体排序,就可以在
SelectionSort的第(4)行进行如下比较:A[j].studentID < A[small].studentID复制代码数组
A和交换中使用的临时变量temp都是struct STUDENT类型,而不是integer类型的。请注意,整个结构体都要进行交换,而不仅仅是交换键字段。交换整个结构体是很费时的,所以产生了一种更有效率的方法,即使用的另一个元素是指向
STUDENT结构体的指针的数组,并且只为第二个数组中的指针排序,结构体本身在第一个数组中保持不变。我们将这种方式的选择排序留作本节的习题。
图2-3展示了SelectionSort函数如何应用到完整的程序中,来给含有n(这里约定n≤100)个整数的序列排序。第(1)行会读取并存储数组A中的n 个整数。如果输入超过MAX,只有前MAX个整数被装入数组A。提供一条消息警告用户输入的数字过大在这里可能很实用,不过我们先不考虑这一点。
#include <stdio.h>
#define MAX 100
int A[MAX];
void SelectionSort(int A[], int n);
main()
{
int i, n;
/* 在A 中读取和存储输入 */(1) for (n = 0; n < MAX && scanf("%d", &A[n]) != EOF; n++)(2) ;(3) SelectionSort(A,n); /* 排序A */(4) for (i = 0; i < n; i++)(5) printf("%d\n", A[i]); /* 打印A */
}
void SelectionSort(int A[], int n)
{
int i, j, small, temp;
for (i = 0; i < n-1; i++) {
small = i;
for (j = i+1; j < n; j++)
if (A[j] < A[small])
small = j;
temp = A[small];
A[small] = A[i];
A[i] = temp;
}
}复制代码图 2-3 使用选择排序的排序程序
第(3)行调用SelectionSort来为数组排序。第(4)行和第(5)行会按照排好的顺序将这些整数打印出来。
1. 假设用SelectionSort函数来处理包含如下几组元素的数组:
(a) 6,8,14,17,23
(b) 17,23,14,6,8
(c) 23,17,14,8,6
在每种情况下,分别会发生多少次元素的比较和交换?
2. ** 在为具有n个元素的序列排序时,SelectionSort进行(a)比较和(b)交换的最少次数及最多次数分别是多少?
3. 编写C语言函数,接受两个字符链表作为参数,如果第一个字符串在词典顺序上先于第二个字符串,就返回TRUE。提示:实现本节中描述的字符串比较算法。当两个字符串前面的字符相同时,通过在字符串尾部让该函数调用自身进行递归。除此之外,大家还可以设计迭代算法完成同样的工作。
4. * 修改习题3中的程序,使其在比较过程中忽略字母的大小写。
5. 如果所有元素都相同,选择排序会做些什么?
6. 修改图2-3中的程序,使其在数组元素不是整数而是类型为struct STUDENT的结构体时执行选择排序,就像前文附注栏“键排序”中所定义的那样。假设键字段是studentID。
7. * 进一步修改图2-3,使其能为任意类型T 的元素排序。不过,大家可以假设某个函数key可以接受某个类型为T 的元素作为参数,并为该元素返回某个任意类型K 的键。还假设有函数lt 接受类型为K 的两个元素作为参数,且若第一个元素“小于”第二个元素,就返回TRUE,否则返回FALSE。
8. 除了在数组A中使用整数下标,还可以使用指向整数的指针表示数组中的位置。使用指针重写图2-3中的选择排序算法。
9. * 正如在前文附注栏“键排序”中提到的,如果要排序的元素是诸如类型STUDENT这样的大型结构体,我们可以将它们留在原数组中保持原样,并在第二个数组中对指向这些结构体的指针排序。写下选择排序的这种变形。
10. 写一个迭代程序,打印一个整数数组中的不同元素。
11. 使用本章开始部分所描述的符号Σ和Π来表示以下内容。
(a) 1到377中所有奇数的和。
(b) 2到n(假设n 是偶数)中所有偶数的平方的和。
(c) 8到2k中所有2的n 次幂的积。
12. 证明当small = i时,图2-2中的第(6)到(8)行(进行交换的步骤)对数组A没有任何影响。

邯郸网站优化【邯郸开通400电话】邯郸网站搭建、邯郸微信公众号推文外包、邯郸开通京东拼多多设计、邯郸淘宝装修