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