补充插入算法内容,修改练习题,增加插入操作

Signed-off-by: lion187 <cy187lion@sina.com>
This commit is contained in:
lion187 2018-12-21 23:34:21 +08:00
parent ec3f4cf922
commit bb0bd25983

View File

@ -1,4 +1,6 @@
# 4.3 查找算法
# 4.3 查找与插入算法
在实际应用中,查找数据和插入新数据都是很常见的操作,在本节中可以看到,高效的查找和插入操作都要求数据首先是有序的,这依赖于上一节的排序算法。可以对很多种数据结构实施排序、查找和插入操作,但到本节为止,我们都是以数组为基本结构进行讲解的,其他类型数据结构的排序、查找和插入操作将在各自章节进行说明。
## 4.3.1 顺序查找
@ -55,6 +57,17 @@ int main(void)
二分查找法之所以有效,是因为以上数组是有序数组,在进行查找时,已经知道了数组是从大到小排序还是从小到大排序的。如果数组是无序的,那么很难知道下一个要找的元素所在位置。因此,要进行快速查找,通常需要对数据进行排序,通常排序只需要进行一次,而查找数据是人们会反复进行的操作,因此为了查找而对数据进行排序是非常有意义的。
## 4.3.3 插入算法
在实际应用中,插入新数据是很常见的操作。在插入新数据以前,需要先确定要插入的位置,这往往是查找算法的工作。在无序数组中,只能使用顺序查找法,而有序数组中可以使用二分查找法。
在确定了要插入数据的位置后,需要将从插入位置开始到结尾的全部数据向后移动一个位置,将插入的位置空出,之后才能将新数据写入到空出的位置中。
可以看出,在数组中插入新的数据项,往往伴随着旧数据的移动,如果新数据需要插入到末尾,那就是最理想的情况——不需要移动任何数据。但如果新数据需要插入到队首,那就要将原有的 N 个数据都移动一次。
## 练习
某中学级进行了期末考试,学生的姓名、性别、学号(具有唯一性)、年级、班级、成绩都保存在电脑中,实现一个程序,任意给出学号或学生姓名、输出对应的学生信息和数学成绩。
某中学级进行了期末考试,学生的姓名、性别、学号(具有唯一性)、年级、班级、成绩都保存在电脑中,实现一个程序:
1. 任意给出学号或学生姓名、输出对应的学生信息和数学成绩;
2. 允许插入新的学生信息和数学成绩。