Skip to content

第五章 与算法成为好朋友

程序中的“哨兵”指的是什么

“哨兵”指的是一种含有特殊值的数据,可用于标识数据的结尾等。C 语言中,字符串的末尾用 0 表示,链表的末尾用-1 表示。

什么是算法,程序的处理流程就是算法。

5.1 算法是程序设计的“熟语”

并不是说只有把由哪些智慧超群的学者想出的算法全部牢记心中才能编写程序,简单的算法也是有的。只要理清在现实世界解决问题的步骤,再结合计算机的特性,就一定能想出算法。

5.2 要点 1:算法中解决问题的步骤是明确且有限的

算法就是“把解决问题的步骤无一遗漏地用文字或图表示出来”。 要是把这里的“用文字或图表示” 替换为“用编程语言表达”, 算法就变成了程序。

5.3 要点 2:计算机只能机械的解决问题

计算不能自发地思考。 因此计算机所执行的由程序表示的算法必须是由机械的步骤所构成。 所谓“机械的步骤”, 就是不用动任何脑筋,只要按照这个步骤做就一定能完成的意思。

众多的学者和前辈程序员们已经发明创造出了很多机械地解决问题的步骤, 这些步骤并不依赖人类的直觉。 由此所构成的算法被称为“典型算法”。

5.4 要点 3:了解并应用典型算法

作为程序员的修养,下面的表中列出了笔者认为最低限度应该了解的典型算法。

名称用途
辗转相除法最大公约数
筛法判定素数
顺序查找检索数据
二分查找检索数据
哈希查找检索数据
冒泡排序数据排序
快速排序数据排序

5.5 要点 4:利用计算机的处理速度

5.6 要点 5:利用编程技巧提升程序执行速度

5.7 要点 6:找出数字间的规律

所有的信息都可以用数字表示——这是计算机的特性之一。 因此为了构造算法, 经常会利用到存在于数字间的规律。

5.8 要点 7:现在纸上考虑算法

画流程图就可以方便地把算法用图表示出来, 因此请诸位大量地、灵活地运用它。 如果不想画流程图, 也可以用语言把算法描述出来,写成文书。 总之先写到纸上这一点很重要