发表日期: 2021-04-10 15:25:07 浏览次数:135
邯郸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级景区。
考虑base,ball,mound,bat,glove,batter这列单词。有了该输入,排序算法会按照词典顺序生成输出:ball,base,bat,batter,glove,mound。
假设要对一个具有n 个整数的数组A按照非递减顺序排序。我们可以通过对这个步骤的迭代来完成该工作:找出尚不在数组已排序部分的一个最小元素1,将其交换到数组未排序部分的第一个位置。在第一次迭代中,我们在整个数组A[0..n-1]中找出(“选取”)一个最小元素,并将其与A[0]互换位置。2在第二次迭代中,我们从A[1..n-1]中找出一个最小元素,并将其与A[1]互换位置。继续进行这种迭代。在开始第i+1次迭代时,A[0..i-1]已经是将A中较小的i 个元素按照非递减顺序排序了,而数组中余下的元素则没有特定的顺序。在第i+1次迭代开始前数组A的状态如图2-1所示。
1这里说“一个”最小元素是因为最小值可能出现多次。如果是这样,找到任何一个最小值就行了。
2为了描述数组中某个范围内的元素,我们采用了Pascal语言中的约定。如果A是数组,那么A[i..j]就表示数组A中下标从i 到j 这个范围内的那些元素。

图 2-1 在进行选择排序的第i+1次迭代前数组的示意图
对名字与值的约定
我们可以将变量视为具有名字和值的框。在提到变量时,比如
abc,我们会使用等宽字体来表示其名字;在提到变量abc的值时,我们会使用斜体字,如abc。总之,abc表示框的名字,而abc则表示它的内容。
在第i+1次迭代中,要找出A[i..n-1]中的一个最小元素,并将其与A[i]互换位置。因此,在经过第i+1次迭代之后,A[0..i]已经是将A中较小的i+1个元素按照非递减顺序排序了。在经过第n+1次迭代之后,就完成了对整个数组的排序。
图2-2展示了用C语言编写的选择排序函数。这个名为SelectionSort的函数接受数组A作为其第一个参数。第二个参数n表示的是数组A的长度。
void SelectionSort(int A[], int n)
{
int i, j, small, temp;(1) for (i = 0; i < n-1; i++) {
/* 将small 置为剩余最小元素第一次出现时
的下标*/(2) small = i;(3) for (j = i+1; j < n; j++)(4) if (A[j] < A[small])(5) small = j;
/* 到达这里时,small 是A[i..n-1]
/* 中第一个最小元素的下标, */
/* 现在交换A[small]与A[i]。 */(6) temp = A[small];(7) A[small] = A[i];(8) A[i] = temp;
}
}复制代码图 2-2 迭代的选择排序
第(2)到(5)这几行程序从数组未排序的部分A[i..n-1]中选取一个最小元素。我们首先在第(2)行中将下标small的值设为i。第(3)到(5)这几行的for循环会依次考量所有更高的下标j,如果A[j]的值小于A[i..j-1]这个范围内的任何数组元素的值,那么就将small 置为j。这样一来,我们就将变量small的值置为A[i..n-1]中最先出现的那个最小元素的下标了。
在为下标small选好值后,在第(6)到(8)行中,我们要将处于该位置的元素与A[i]处的元素互换位置。如果small=i,交换还是会进行,只是对数组没有任何影响。请注意,要交换两个元素的位置,还需要一个临时的位置来存储二者之一。因此,我们在第(6)行将A[small]里的值移到temp中,并在第(7)行将A[i]里的值移到A[small]中,最终在第(8)行将原来A[small]里的值从temp移到A[i]中。
我们来研究一下SelectionSort针对各种输入的行为。首先看看运行SelectionSort处理没有元素的数组时会发生什么。当n=0时,第(1)行中的for循环的主体不会执行,所以SelectionSort很从容地“什么事都没做”。
现在考虑一下数组只有一个元素的情况。这次第(1)行中的for循环的主体还是不会执行,这种反应是令人满意的,因为由一个元素组成的数组始终是已排序的。当n为0或1时的情况是重要的边界条件,检测这些条件下算法或程序的性能是很重要的。
最后,我们要运行SelectionSort,处理一个具有4个元素的较小数组,其中A[0]到A[3]分别是

我们从i=0起开始外层的循环,并在第(2)行将small置为0。第(3)到(5)行构成了内层的循环,在该循环中,j 依次被置为1、2和3。对于j=1,第(4)行的条件是成立的,因为A[1],也就是30,要小于A[small ],即A[0],或者说是40。因此,在第(5)行我们会将small置为1。在(3)至(5)行第二次迭代时,有j=2,第(4)行的条件还是成立,因为A[2]<A[1],所以我们在第(5)行将small置为2。在第(3)到(5)行的最后一次迭代中,有j=3,第(4)行的条件依旧成立,因为A[3]<A[2],所以在第(5)行将small置为3。
现在我们跳出内层循环,到达第(6)行。将A[small](即10)赋给temp,接着在第(7)行,将A[0](也就是40)赋给A[3],然后在第(8)行将10赋给A[0]。现在,外层循环的第一次迭代已经完成,而此时的数组A就变成下面这样了

外层循环进行第二次迭代时,有i=1,在第(2)行将small置为1。内层循环起初会将j置为2,而因为A[2]<A[1],第(5)行会将small置为2。对j=3,第(4)行的条件不成立,因为A[3]≥A[2]。因此,在到达第(6)行时,就有small=2。第(6)到(8)行会交换A[1]和A[2],让数组变成

虽然数组现在正好已排序了,但我们还是要迭代一次外层循环,这时i=2。我们在第(2)行将small置为2,内层循环此时按照j=3的情况来执行。因为第(4)行的条件不成立,small依旧为2,而在第(6)到(8)行
