一文总结常见基础排序算法

(本文属于排序算法总结,并非零基础讲解。更多内容可以参考:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html) 0 前言 个人总结的常见基础排序算法,罗列如下: 简单排序,时间复杂度 O(N2):冒泡排序、选择排序、插入排序 高级排序,时间复杂度 O(NlogN):归并排序(自顶向下、自底向上)、快速排序(含3路快排)、堆排序 像希尔

【算法】1.3. 背包、队列和栈

正文 许多基础数据类型都和对象的集合有关。具体来说,数据类型的值就是一组对象的集合,所有操作都是关于添加、删除或是访问集合中的对象。在本节中,我们将学习三种这样的数据类型,分别是背包(Bag)、队列(Queue)和栈(Stack)。它们的不同之处在于删除或者访问对象的顺序不同。 本节目标: 说明我们对集合中的对象的表示方式将直接影响各种操作的效率。对于集合来说,我们将会设计适于表示一组对象的数据结

【算法】1.2. 数据抽象

正文 抽象数据类型(ADT)是一种能够对使用者隐藏数据表示的数据类型。使用一种数据类型并不一定非得知道它是如何实现的。 1.2.2 抽象数据类型举例 1.2.2.1 几何对象 处理几何对象的程序在自然世界模型、科学计算、电子游戏、电影等许多计算中有着广泛的应用。此类程序的研发已经发展成了“计算几何学”这门影响深远的研究学科。 1.2.2.2 信息处理 无论是需要处理数百万信用卡交易的银行,还是需要

【算法】1.1. 基础编程模型

正文 二分查找与白名单过滤 想象一家信用卡公司,它需要检查客户的交易账号是否有效。为此,它需要: 将客户的账号保存在一个文件中,我们称它为“白名单”; 从标准输入中得到每笔交易的账号; 在标准输出中打印所有与任何客户无关的账号,公司很可能拒绝此类交易。 在一家有上百万客户的大公司中,需要处理数百万甚至更多的交易都是很正常的。暴力实现处理大量输入(比如含有 100 万个条目的白名单和 1000 万条

【算法】0. 前言

本系列文章是学习《算法》(作者:Sedgewick)的笔记。首先是排序、查找相关算法,后续再深入其他算法。 为什么要学算法? 大公司都喜欢面算法,为什么? 算法(以算法为代表的基础知识)是编程内功,好的算法教程,就像江湖上的《九阴真经》,修习之后内力暴涨。理论上说,若内力深厚,学任何一门功夫都将得心应手。自我感觉,目前技术上的一大瓶颈,是源于算法知识的薄弱。如果仅仅通过工作累积熟练度,提升十分有限

二分查找法求某数的任意次方根

以下代码出自 MOOC 《计算机科学和 Python 编程导论》第四讲。 这段代码比较简单,但至少有以下值得注意和学习的地方: 二分查找法的使用 测试用例覆盖所有情况(在这里是:正数、负数、绝对值大于 1、绝对值小于 1) 对 low 和 high 赋值的方式,比较巧妙 为每个功能函数添加说明文档(即使工作多年的职业程序员,也不一定做到) def findRoot(x, power, epsilo

求斐波那契数的非递归实现

今天在做MOOC“程序设计入门—Python”的习题,原题如下: 题目内容: 一个斐波那契数列的前10项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,对于一个最大项的值不超过n的斐波那契数列,求值为偶数的项的和。 输入格式: 一个正整数n,如100。 输出格式: 值为偶数的项的和,如 2 + 8 + 34 = 44。 输入样例: 100 输出样例: 44