本系列前几课分别介绍了算法的常用设计模式、建立数据模型的常用思路和方法。其实,用代码实现的算法肯定还会包含一些代码特有的技巧,这一课就来介绍一些这样的技巧。这些巧妙构思的代码技巧,有些体现了效率,有些体现了程序设计的一致性原则,有些则体现了软件架构的一些好思想;这些技巧,都可以在今后的算法设计中直接或间接使用,即使用不上,了解这些内容对于开阔思维还是很有益处的,更不用说其中一些技巧都是常见或不常见的面试题了。

常用技巧

哨兵位

设置哨兵位是程序设计中常用的技巧之一,常用在线性表的处理过程中,比如查找和移动数据操作。哨兵位通常起到两个作用,一个是作为一个临时存储空间使用,另一个是减少不必要的越界判断,简化算法代码复杂度。比如环形链表通常会设置一个表头节点,无论向前或向后遍历,均以这个表头节点为遍历越界(重复)的依据,这样维护链表的时候就不需要专门存储一个表头指针,这个表头节点可以理解为哨兵位。插入排序算法中也会利用表中的 0 号位置作为哨兵位使用,这个位置不仅起到一个临时存储空间的作用,还可以简化插入后移动数据的判断条件。注意下面的插入排序代码,内层 while 循环移动数据的时候,只需判断当前位置的数是否比 ls[0] 位置大即可,不需要关心 j 的位置是否小于 1 而越界,因为当 j=1 的时候,ls[j - 1] > ls[0] 的条件肯定不满足,while 循环就会终止。如果不使用哨兵位,内层移动数据的循环处理代码就需要增加 j 是否越界的判断。

//带哨兵位的插入排序,ls[0]是哨兵位,数据从ls[1]开始存放
void insert_sort(int *ls, int n)
{for (int i

第1-7课:基础开胃菜相关推荐

  1. 1.开胃菜(基础篇)

    1. 开胃菜 如果你在电脑上做了很多工作,最终你会发现有些任务你想自动化.例如,您可能希望对大量文本文件执行搜索和替换,或者以复杂的方式重命名和重新排列一堆照片文件.也许您想编写一个小型的自定义数据库 ...

  2. Python教程之开胃菜

    Python教程之开胃菜 如果你使用电脑做很多工作,最终你会发现有些工作愿意自动化.举个栗子,你可能需要对大量的文本文件执行"搜索-替换"操作,或者重命名/重新排序一堆照片文件,用 ...

  3. Python 开胃菜

    开胃菜 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要编写一个 ...

  4. 《程序分析:开胃菜》概览

    <静态分析:开胃菜>概览 <程序分析:开胃菜>比高级课程<Principles of Program Analysis>更加基础.和另一本书<形式化方法:开胃 ...

  5. python菜_1. 开胃菜 — Python tutorial 3.6.3 documentation

    1. 开胃菜¶ 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要 ...

  6. 魅族 MX3 深入拆解第一季:开胃菜

      楼主:海岛猫鼬1213 时间:2013-10-25 17:14:00 点击:1420 回复:9    楼主发言:1次 发图:0张  回复 收藏 更多 楼主 各位久等了.从今天开始,楼主会连载MX3 ...

  7. 数据结构:完全二叉树开胃菜小练习

    目录 一.前言 二.完全二叉树的重要结构特点 三.完全二叉树开胃菜小练习 1.一个重要的数学结论 2.简单的小练习 一.前言 关于树及完全二叉树的基础概念(及树结点编号规则)参见:http://t.c ...

  8. C#面向对象(一):明确几个简单的概念作为开胃菜

    绝对干货,总结了下C#面向对象的干货内容以及我几年来的使用心得,分享出来 先明确几个简单概念作为开胃菜: 1.命名空间 namespace BackStageManagement.Services 关 ...

  9. MateRS能不能升级鸿蒙,华为MateRS只是开胃菜:麒麟980+1536G+5G芯片,网友:确实很吓人!...

    原标题:华为MateRS只是开胃菜:麒麟980+1536G+5G芯片,网友:确实很吓人! 华为手机作为国内很既有实力的手机厂商,乃至在世界上都是数一数二的高端手机厂商.华为旗下大家众所周知的两大旗舰产 ...

最新文章

  1. asp导出word中文乱码_解决文档打开乱码问题丨小工具系列
  2. 手把手 | 教你爬下100部电影数据:R语言网页爬取入门指南
  3. atoi,atol,strtod,atof
  4. 【推荐系统】五个工业风满满的 Look-alike 算法
  5. IOS15全屏滑动返回
  6. IAR STM32工程报错Error[Pe020]: identifier “GPIO_Pin_0”is undefined D:\STM32F103_Demo\App\main.c
  7. mysql 事务回滚_SQL基础丨事务处理
  8. Android Studio(5)--创建 Android 库
  9. 打开.class文件
  10. yum源的三种安装配置方式,总有一款适合你
  11. VS2015社区版MFC安装
  12. 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
  13. 使用hexo基于cactus仙人掌主题最全美化客制教程
  14. Linux ip forward转发问题总结
  15. mysql五日均线_5日均线战法(建议收藏)
  16. Android平板app开发布局文件,Android平板开发相关
  17. Linux C/C++ 获取系统时间
  18. ios 倒数器_如何利用ps绘制IOS7风格的倒数计时器
  19. 联想拯救者 Y32p 显示器 评测
  20. 搞一下SOA | 03 DDS详解

热门文章

  1. Ubuntu20.04下配置Anaconda3+NVIDIA 驱动+Cuda11.1+Cudnn8.0.5
  2. 软件测试之测试用例颗粒度问题
  3. vue实现时间段选择组件,分星期,最小粒度半点
  4. 云南一脸通行业解决方案、钉钉智慧食堂、智慧餐厅、智慧工地解决方案
  5. 为什么很多人认为测试就是“鼠标点点点”?
  6. 量子计算机需要mK温度工作吗,格林函数法分析冷槽离子量子计算机中的温度效应.pdf...
  7. 【Java】实现统计字符串中大写、小写、数字字符出现次数
  8. 详解薄膜缺陷检测系统原理及功能
  9. 运维岗位面试被问到的问题
  10. 灭火器摆放识别检测算法 yolo