数据结构与算法
文章平均质量分 74
haoxiaodao
编程是在计算机中反映世界
展开
-
C++基础知识总结
很久没接触C++的入门知识,写程序时连输入输出有几种方法这种简单的东西也不记得了,这里记录C++常用的基础知识,以后忘了可以过来瞟两眼。(*^__^*)原创 2015-03-11 13:45:20 · 1095 阅读 · 0 评论 -
【数据结构与算法】图
一、概念 定义: 图由点集合和边集合组成,记做G=(V,E),其中点集合不能为空且应该有穷,边集合可以为空。 ①有向图:边有方向,用表示 ②无向图:边没有方向,用(Vi,Vj)表示 ③完全图:每两个顶点之间都有连线,有向完全图的边有n(n+1)个;无向完全图有n(n+1)/2个边。 ④路径和回路:路径是指从一个点到另外一个点走过的路原创 2015-09-12 15:51:18 · 1331 阅读 · 0 评论 -
【排序】快速排序法
分治的基本思想:是将原来的问题分解成若干个规模更小但结构与原问题想死的子问题,然后递归去解决这些子问题,最后将这些子问题的解的组合作为原问题的解。 快速排序的图解过程如下:代码:#include using namespace std;#define MAXN 100int a[MAXN + 1], n; //全局变量存数组void QuickSort(i原创 2015-09-11 13:36:15 · 745 阅读 · 0 评论 -
【排序】冒泡排序法
冒泡排序法,是最简单的一种排序方法,从第一个位置开始与相邻位置比较,判断是否需要交换位子。 第一趟从第一个位置开始,直到最后一个位置,A[n-1],确定最大(以升序为例子)的数放在最后一位,A[n-1] 第二趟,继续从第一个位置开始,倒数第二位,A[n-2],确定倒数第二大的数在倒数第二位A[n-2] …… 算法复杂度:冒泡排原创 2015-09-11 13:48:50 · 621 阅读 · 0 评论 -
【排序】直接选择排序
直接选择排序思想:先把0位置设置为索引,接着用index(索引)向后找最小的, 每一趟分别把最小的放在前面,然后和原来前面的数据交换位置。 时间复杂度:O(n*n) 代码:#include using namespace std;#define MAXN 100int a[MAXN + 1]; //全局变量存数组int main() {原创 2015-09-11 14:12:20 · 588 阅读 · 0 评论 -
【排序】插入排序法
插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止. 直接插入排序 基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1原创 2015-09-11 14:02:09 · 1037 阅读 · 0 评论 -
C语言运算符的优先级
一共有十五个优先级: 1 () [] . ->2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof 3 * / %4 + - 5 >> 6 > >= 7 == != 8 & 9 ^原创 2015-06-04 16:15:19 · 652 阅读 · 0 评论 -
【数据结构与算法】八皇后问题之递归
八皇后问题递归求解 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。【任意两个皇后的位置,不同行,不同列,不同斜线(两条)】思路 首先采取按行放置皇后,即先放第一行的皇后,放置后,然后在第二行上放置皇后,并进行借测,不冲突的话继续放置第三行,一次类推,到最原创 2015-08-12 16:31:44 · 988 阅读 · 0 评论 -
【数据结构与算法】折半查找算法(二分法)
如果从文件中读取的数据记录的关键字是有序排列的,则可以用一种效率比较高的查找方法来查找文件的记录,这就是折半查找法,又称为二分法搜索。 折半查找的基本思想是:减小查找序列的长度,分而治之地进行关键字的查找。 假设数组元素呈升序排列。 将 n 个元素分成个数大致相同的两半,取 a[n/2] 与欲查找的 x 作比较, 如果 x = a[n/2]原创 2015-08-10 17:40:32 · 3436 阅读 · 0 评论 -
【数据结构与算法】字符串匹配之BF&KMP算法
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。参考代码:#include #include using namespace std;int原创 2015-08-15 11:12:02 · 621 阅读 · 0 评论 -
各类排序小结
——O(n*n)——①冒泡排序时间复杂度,最差、平均都是O(n*n),最好是O(n),空间复杂度 1,是一种稳定的排序②直接插入时间复杂度,最差、平均都是O(n*n),最好是O(n),空间复杂度 1,是一种稳定的排序③直接选择排序时间复杂度,最差、平均都是O(n*n),空间复杂度 1,是一种不稳定的排序——O(n*logn)——①快速排序时间复杂原创 2015-09-11 16:25:56 · 535 阅读 · 0 评论 -
【排序】堆排序法
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:原创 2015-09-11 14:53:18 · 151 阅读 · 0 评论 -
【排序】希尔排序法
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效原创 2015-09-11 15:54:14 · 715 阅读 · 0 评论 -
【数据结构与算法】Hash表
Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。 Hash表的设计思想 对于一般的线性表,比如链原创 2015-09-26 11:18:12 · 739 阅读 · 0 评论 -
【数据结构与算法】哈夫曼树
1. 哈夫曼树的基本概念 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。 所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为: WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln) N个权值Wi(i=1,2,...n)构成一棵有N个原创 2015-09-12 16:00:33 · 1345 阅读 · 0 评论