
算法与数据结构
文章平均质量分 69
mmdnxh
在读大学生/物联网工程/
展开
-
线性顺序链表简单实现
#include<iostream>using namespace std;//#define MaxSize 20;const int MaxSize = 20;typedef int ElemType;typedef int Status;//typedef int ATTR[10];const int OK =1;const int ERROR =0;const int T原创 2017-07-14 17:45:48 · 356 阅读 · 0 评论 -
数据库索引的原理到底是什么?
引言 中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理。网管对前台的管理和维护工作包括保障网络链路通畅、处理MIS终端的突发事件以及对操作员的管理、培训等,这是网管们日常做得最多、最辛苦的功课;然而MIS系统架构中同等重要的针对数据库的管理、维护和优化工作,现实中似乎并没有得到网管朋友的足够重视,看起来这都是程序员的事,事实上,一个网管如果转载 2017-11-12 12:06:13 · 26179 阅读 · 1 评论 -
快速排序
快速排序的基本思想:通过一趟排序将待排记录分割为独立的两个部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分继续进行排序,以达到整个序列有序的目的。快速排序与归并排序一样,也使用了分治思想。 下面对一个典型的子数组A[p..r]进行快速排序的三步分治过程。分解:数组A[p..r]被划分为两个 (可能为空) 子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]原创 2017-09-30 14:37:29 · 435 阅读 · 0 评论 -
有序表查找
有序表的定义 有序表:对于以数组方式存储的数据,如果已经按其关键字值的大小顺序排列好,则称为有序数组或有序表。因此,使用有序表查找的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储。折半查找 折半查找(Binary Search):又称二分查找。 折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与原创 2017-11-09 12:35:59 · 9994 阅读 · 0 评论 -
顺序表查找
查找的定义 查找(searching)就是根据给定的某一个值,在查找表中确定一个关键字等于给定值的数据元素(或记录)。查找表(Search Table)是由同一类型的数据元素(记录)构成的集合。,关键字(Key)是数据元素中某一个数据项的值,称为键值,用来标识一个数据元素。若表中不存在关键字等于给定值的记录,则查找不成功,此时查找的结果可给出一个“空”记录或“空”指针。原创 2017-11-09 10:33:11 · 11230 阅读 · 0 评论 -
线性时间排序:计数排序、基数排序、桶排序
对于内排序算法,从最初的时间复杂度O(n*n)改进到O(nlogn)。常见的归并排序和堆排序达到了最坏情况的上界,快速排序在平均情况下达到上界。(时间复杂度为O(nlogn))。这些算法都有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较,因此这类算法被称为比较排序。对于排序算法我们可知,在最坏情况下,任何比较排序算法都需要做O(nlgn)次比较。在算法导论第八章中的证明中给出了转载 2017-10-01 22:00:22 · 1203 阅读 · 0 评论 -
直接插入排序
直接插入排序的思想是:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入并排序,直至整个序列有序为止。算法中引进的附加记录R[0]称监视哨或哨兵(Sentinel)。 哨兵有两个作用: ① 进人查找(插入位置)循环之前,它保存了R[i]的副本,使不致于因记录后移而丢失R[i]的内容; ② 它的主要原创 2017-09-28 15:55:56 · 326 阅读 · 0 评论 -
希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。同时也突破了之前内排序算法复杂度为O(n2)的限制。 希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由原创 2017-09-28 17:12:30 · 276 阅读 · 0 评论 -
堆排序
由于堆也被引申为Java中的垃圾收集存储机制,在本文中使用堆的定义仅为堆数据结构。完全二叉树的定义为:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。堆是一个数组,也可以被看作一个近似的完全二叉树。对堆可以分为两类:大顶堆:每个结点的值都大于或等于其左右孩子的值小顶堆:每个结点的值都大于或等于其左右孩子的值 左边的即为大顶堆,右边的即为小顶堆,堆也可用作原创 2017-09-28 19:33:57 · 380 阅读 · 0 评论 -
归并排序
当一个算法在结构上是递归的:即算法一次或多次调用自身以解决紧密相关的若干子问题。这些算法典型地遵循分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后在合并这些子问题的解来建立原问题的解。分治法在每层递归上都有三个步骤:分解原来问题为若干子问题,然后,这些子问题是原问题的规模较小的实例。解决这些子问题,递归地求解各个子问题, 然而,若子问题规模足够小时,则直原创 2017-09-29 19:21:54 · 352 阅读 · 0 评论 -
表达式的前缀后缀问题
一个中缀式到其他式子的转换方法~~ 这里我给出一个中缀表达式~ a+b*c-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号~ 式子变成拉:((a+(b*c))-(d+e)) 第二步:转换前缀与后缀表达式 前缀:把运算符号移动到对应的括号前面 则变成拉:-( +(a *(bc)) +(de)) 把括号去掉:-+a*b转载 2017-07-15 16:40:24 · 592 阅读 · 0 评论 -
冒泡排序
冒泡排序是一种交换排序,它的关键思想是:两两相邻元素的比较。如果反序则交换,直到没有反序的元素。最差时间复杂度 O(n^2)最优时间复杂度 O(n)平均时间复杂度 O(n^2)最差空间复杂度 O(n),辅助空间 O(1)void swap(int& x,int& y){ if(x == y) return ; x ^= y; y ^= x;原创 2017-09-28 15:09:44 · 322 阅读 · 0 评论 -
二叉搜索树(BST)
什么是二叉搜索树 一颗二叉搜索树是以一颗二叉树来组织的,这样的一棵树可以用一个链表数据结构来表示,其中每一个结点就是一个对象。除了key和卫星数据之外,每个结点还包括属性left,right和p。它们分别指向结点的左孩子、右孩子和双亲。如果某个孩子结点和父节点不存在,则相应属性的值为NIL。其中卫星数据是指:在实际中,待排序的数很少是单独的数值,每个记录包含一个关键字(key),原创 2017-11-16 11:33:58 · 726 阅读 · 0 评论