算法
文章平均质量分 86
烬_zhang
而困而知,而勉而行
展开
-
【算法 一 】—— 插入排序
插入排序插入排序算法类似于玩扑克时抓牌的过程,玩家每拿到一张牌都要插入到手中已有的牌里,使之从小到大排好序。 扑克牌的插入排序:也许你没有意识到,但其实你的思考过程是这样的:现在抓到一张7,把它和手里的牌从右到左依次比较,7比10小,应该再往左插,7比5大,好,就插这里。为什么比较了10和5就可以确定7的位置?为什么不用再比较左边的4和2呢?因为这里有一个重要的前提:手里的牌已经是排好序的。现在我...原创 2018-03-08 11:21:39 · 370 阅读 · 0 评论 -
【算法 二】—— 时间复杂度分析
解决同一个问题可以有很多种算法,比较评价算法的好坏,一个重要的标准就是算法的时间复杂度。现在研究一下插入排序算法的执行时间,按照习惯,输入长度LEN以下用n表示。设循环中各条语句的执行时间分别是c1、c2、c3、c4、c5这样五个常数:受内存管理机制的影响,指令的执行时间不一定是常数,但执行时间的上界(UpperBound)肯定是常数,我们这里假设语句的执行时间是常数只是一个粗略估计。void i...原创 2018-03-08 14:19:57 · 761 阅读 · 0 评论 -
【算法 三】—— 归并排序
归并排序插入排序算法采取增量式(Incremental)的策略解决问题,每次添一个元素到已排序的子序列中,逐渐将整个数组排序完毕,它的时间复杂度是O(n2)。下面介绍另一种典型的排序算法--归并排序,它采取分而治之(Divide-and-Conquer)的策略,时间复杂度是Θ(nlgn)。归并排序的步骤如下:1. Divide: 把长度为n的输入序列分成两个长度为n/2的子序列。2. Conque...原创 2018-03-08 15:03:03 · 194 阅读 · 0 评论 -
【算法 四】——线性查找和折半查找
线性查找有些查找问题要用时间复杂度为O(n)的算法来解决。例如写一个indexof函数,从任意输入字符串中找出某个字母的位置并返回这个位置,如果找不到就返回-1:例: 线性查找#include <stdio.h> char a[]="hello world"; int indexof(char letter) { int i = 0; while (a[i] != '\0') ...原创 2018-03-08 15:48:03 · 547 阅读 · 2 评论