今天多看看插入排序的理论部分。

先贴几个概念吧:

1、伪代码英语:pseudocode),又称为虚拟代码,是高层次描述算法的一种方法。它不是一种现实存在的编程语言(已经出现了类似伪代码的语言,参见Nuva);它可能综合使用多种编程语言的语法、保留字,甚至会用到自然语言。它以编程语言的书写形式指明算法的职能。相比于程序语言(例如Java、C++、C、Delphi 等等)它更类似自然语言。它是半形式化、不标准的语言。我们可以将整个算法运行过程的结构用接近自然语言的形式(这里可以使用任何一种作者熟悉的文字,例如中文、英文,重点是将程序的意思表达出来)描述出来。使用伪代码,可以帮助我们更好的表述算法,不用拘泥于具体的实现。(源自:http://zh.wikipedia.org/wiki/%E4%BC%AA%E4%BB%A3%E7%A0%81)

自己理解:伪代码种类繁杂,没有固定的书写格式,不过要写清楚让人看懂就可以了。

INSERT-SORT(A)
for j <-- 2 to length[A]
do key <-- A[j]
> Insert A[j] into the sorted sequence A[1..j-1].
i <-- j - 1
while i > 0 and A[i] > key
do A[i+1] <-- A[i]
i <-- i - 1
A[i+1] <-- key

以上是copy别人的伪代码。具体来说,就是 if 条件 do 事情;for while 循环;<—为赋值语句。以后写程序之前先要写伪代码。

2、时间和空间复杂度

算法时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。

一个程序空间复杂度是指运行完一个程序所需内存的大小。利用程序空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。
(1)固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。
S(n)=O(f(n))
其中n为问题的规模,S(n)表示空间复杂度
据说现在空间复杂度不用过多考虑,毕竟内存都比较大了。时间复杂度还是要好好琢磨的。

每天一个小算法(insertion sort3)的更多相关文章

  1. 每天一个小算法(Shell Sort3)

    希尔算法自己编了一个,循环很多,很不美观,不过运行正确: c语言实现: #include <stdio.h> #include <stdlib.h> #define LEN 2 ...

  2. 每天一个小算法(Shell sort5)

    希尔排序的关键在于步长的选取. 希尔排序的复杂度比较复杂,主要跟步长的选择有关,大概是 O(n logn^2),一般认为就是介于 O(n^2) 和 O(n logn) 之间.最好步长比较复杂,一般第一 ...

  3. 每天一个小算法(4)----在O(1)时间删除指定结点

    O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点. 需要注意的地方是删除头结点和尾结点的处理. #include <stdio.h> ...

  4. python3 自己写的一个小算法(比对中文文本相似度)

    函数使用说明: 函数的三个参数分别是“匹配语句”,“匹配语料”,“相关度”: 匹配语句,和匹配预料中的语句匹配的语句,必须为字符串: 匹配语料,被匹配语句来匹配的语句列表,必须为列表: 相关度,函数只 ...

  5. 感冒了~ vs中py和vb实现一个小算法

    1+1*2+1*2*3+--+1*2*3*n 下面是窗体,就一个按钮和编辑框. 中途还遇到了编码问题,但是感冒太难受,加上明天还要上课.就睡了~ 晚安世界.

  6. Python数学运算的一个小算法(求一元二次方程的实根)

    请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax² + bx + c = 0的两个解. #!/usr/bin/env python # -*- coding: ...

  7. 每天一个小算法(Heapsort)

    #include "stdio.h" #include "stdlib.h" #define Num 10 Heap(int arr[],int i,int n ...

  8. 每天一个小算法(matlab armijo)

    下面是 armijo线搜索+最速下降法的小程序,matlab用的很不熟,费了不少劲. 函数: function g=fun_obj(x) syms a b f = 1/2*a^2+b^2-a*b-2* ...

  9. 每天一个小算法(5)----找到链表倒数第K个结点

    估计这个问题在面试中被问烂了. 思路是先找到正数的第K个结点的指针pT,然后和指向头结点的指针pN一起向后移动,直到第K个指针指向NULL,此时pN指向的结点即倒数第K个结点. 如图: #includ ...

随机推荐

  1. ethereum(以太坊)(四)--值传递与引用传递

    contract Person { string public _name; function Person() { _name = "liyuechun"; } function ...

  2. shell+vim——05

    ln --->link 链接, 链接有两种: 软连接 ln -s 源文件 目标文件   :相当于创建了一个快捷方式,源文件损坏后这个链接也就失效了 ln -s  a.text  a.text.s ...

  3. POJ:3279-Fliptile(矩阵反转)

    Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14701 Accepted: 5381 Description ...

  4. Git-Git克隆

    鸡蛋不装在一个篮子里 Git的版本库目录和工作区在一起,因此存在一损俱损的问题,即如果删除一个项目的工作区,同时也会把这个项目的版本库删除掉.一个项目仅在一个工作区中维护太危险了,如果有两个工作区就会 ...

  5. MySQL之查询性能优化(一)

    为什么查询速度会慢 通常来说,查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段, ...

  6. centos使用--vim配置和推荐插件使用

    目录 1.vimrc的配置内容 2.Vundle使用 简介 安装vundle 配置vundle插件: 安装需要的插件 移除不需要的插件 其他常用命令 3 使用插件 3.1 NERDTree 3.2 e ...

  7. 很全的 Python 面试题

    很全的 Python 面试题 Python语言特性 1 Python的函数参数传递 看两个例子:           Python   1 2 3 4 5 a = 1 def fun(a):      ...

  8. C++的字符输入

    字符串的输入有6中方式,这六种方式各有各的特点,我这篇学习笔记是自己的经验总结,没有去探讨内存,函数库等的复杂问题,仅仅是为了实用: 第一:cin cin一次接受一个字符,所以有的人会选择定义一个字符 ...

  9. css3 skew坐标轴笔记

    transform是css3中对于性能来说是比较安全的 在二维空间里面,skew有两个属性值:skewX,skewY,图形的变化也就是针对这两个值来操作: transform: skewX(45deg ...

  10. yum源是什么

    我们安装软件的时候需要下载软件,将很多软件放在一起就是源.软件安装包的来源. 所以yum源就是软件安装包来源. 如果我们是在线的,他会在网上给你下载安装包,如果是离线的没有网络.那么就只能配置本地的y ...