算法
菜鸟1号ING
felix
展开
-
9种基本的排序算法的总结
排序算法可以说是计算机专业学生要学习的最基础的算法,但其实也是最重要的,现在大部分互联网公司笔试面试也都会涉及到排序算法的知识。除了了解思想之外,还应该动手写一写,分析一些具体思路、时间复杂度、空间复杂度和稳定性等。我们面试讨论小分队也简单讨论了一下排序算法,为了加深记忆,我自己也动手写了一些代码(Linux平台写的,自己测试是通过了),并做一些分析(由于水平较水,代码可能有误!)。转载 2014-06-11 11:28:53 · 760 阅读 · 0 评论 -
线索二叉树
源码:/***中序线索二叉树*@author 菜鸟*@version 2014.7.23*/#include <iostream>#include <windows.h>#include <malloc.h>typedef char DataType;using namespace std;//定义线索二叉树的结构体typede...原创 2014-07-27 19:15:18 · 549 阅读 · 1 评论 -
哈夫曼树
源码:/***哈夫曼树*@author 菜鸟*@version 2014.7.16*/#include #include #include #define Max 100#define MaxValue 10000using namespace std;//创建节点结构typedef struct{ int weight;//表示权值 int flag原创 2014-07-23 17:45:19 · 597 阅读 · 0 评论 -
哈希表
源码:/***哈希表*@author 菜鸟*@version 2014.7.15*///哈希表的设计//这里设计哈希表有两个元素项,一个是数据项,一个是状态项#include #include using namespace std;typedef int DataType;//定义节点结构,这里把次结构弄成动态的结构以便于操作未知的M(内存单元大小原创 2014-07-23 17:55:51 · 525 阅读 · 0 评论 -
查找系列之B_ 树
全部源码: /***B-树*@author 菜鸟*@version 2014.7.9*/#include #include #include #include #define Max 3 //max = m-1 m 为该树结构的阶#define Min 0 //min = m/2-1using namespace std;type原创 2014-07-14 02:35:19 · 693 阅读 · 0 评论 -
基本排序系列之基数排序
基数排序一、基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 其实现原理:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。二、具体操作:此排序的真正实现是通过队列的装置,先进先出原创 2014-06-17 20:25:05 · 1581 阅读 · 0 评论 -
基本排序之详解归并排序
归并排序一、归并排序的效率是仅次于快速排序的稳定的排序算法,其时间复杂度为O(nlog2n)。我们对n 个元素进行一次归并排序时,归并的次数约为log2n,每一次的两路归并排序元素的比较次数约为n-1。二、归并排序的基本思想: 归并排序是通过将一列数组序列中的元素看成一个一个的小序列来进行归并,直到所有的元素都被归并完成后,排序即完成,便是成功的完成了排序原创 2014-06-15 17:24:19 · 1263 阅读 · 0 评论 -
基本排序系列之希尔排序
希尔排序一、希尔排序的基本思想希尔排序的基本思想就是把数进行分组,按照一定的规律分组,最先可以按照d1这个增量分组,d1=n/2(n为数组中数的长度)来分成d1个分组,然后对分组内部的数进行直接插入排序再设置第二个增量d2来分组,如d2 = d1/2这样来分组直到增量为1停止。二、对于这样的一个数组:a[10] ={2,1,4,3,5,7,6,8,0,9}d1增量为10原创 2014-06-13 12:33:36 · 626 阅读 · 0 评论 -
基本排序系列之直接插入排序
直接插入排序一、基本思想: 直接插入排序是在一列数的基础上把第一个数看成已经排序好的数,如果小于这个数就排在其前面否则排在其后面,就这样可以不断被的插入新的元素直到所有的数都插入完毕,这样这列数就排列好了。二、举个例子,以a[10]={2,1,0,4,5,3,6,7,9,8}为例:第一次排序好的:[2] 1第二次排序好的:[1 2] 0第三次排序好原创 2014-06-15 12:24:06 · 653 阅读 · 0 评论 -
查找系列之简述顺序查找和二分查找
顺序查找和二分查找一、顺序查找思想 1、 从表的一端开始扫描,顺序扫描线性表,依次扫描到的结点关键字与给定的值K相比较.如果当前扫描到的结点的关键字与给定的值K相等,则查找成功;若扫描结束后,仍未找到关键字与给定的值K相等,则查找失败; 2、顺序查找既适用于顺序存储结构,也适用于线性表的链式存储结构; 3、ASL= (n+1)/2为其平均查找长度原创 2014-07-03 21:12:27 · 6720 阅读 · 0 评论 -
KMP 字符串的匹配算法
一、KMP算法与Brute-force算法的最大区别就在于KMP算法在比较时,主串的指针i不用回溯,只需回溯字串的指针j而Brute-force算法就是简单的从第一个字符比到最后一位,这时需要对主串的i进行回溯,这样算法的比较次数明显增多KMP的算法复杂度可为O(m +n)而Brute-force的算法复杂度可为O(m*n)。二、在做KMP时我们可以知道每一次字串j的回溯,即每一次字串原创 2014-06-11 11:01:32 · 680 阅读 · 0 评论 -
基本排序系列之简述快速排序,快速掌握快排
快速排序快速排序的算法复杂度最大可达到O(n*n)但平均算法复杂度为o(n*logn),由于快排采用了分治法,挺好用的,而且排序效率相对其他几种排序算法效率更高。快排采用的是一般取第一个数为基准小的放在左边,大的放在右边,然后再对左边的进行分治,再右边的,按此下去达到排序的目的。下面简述快排的思想: 如:数组a[5] = {2,4,5,1,6}以第一个数a[0]即2为基准,指针原创 2014-06-12 00:23:45 · 787 阅读 · 0 评论 -
基本排序系列之计数排序
简述计数排序 看了好多别人写的计数排序,看了好久都没看懂,弄了好久最后发现这么简单居然花了几个小时,所以在这里写上,希望和我一样的初学者不会再绕弯路。一、简述计数排序的思想: 设被排序的数组为A,排序后存储到B,C为临时数组。所谓计数,首先是通过一个数组C[i]计算大小等于i的元素个数,此过程只需要一次循环遍历就可以;在此基础上,计算小于或者等原创 2014-07-03 17:12:54 · 3206 阅读 · 0 评论 -
基本排序系列之最简单讲述堆排序
最简单,最直接的讲述堆排序一、什么是堆,何来堆排序呢?堆是一颗完全二叉树,且父节点必须大于子节点。什么叫完全二叉树呢,完全二叉树指的是前面n个节点都是满二叉树中的节点换句话说就是完全二叉树的子节点必须处于树的最后两行,且是从左到右的顺序。二、堆排序的基本思想通过对堆的调整得到根节点,因为调整后的根节点是整棵树最大的,这样就得到了此时的最大值,这时将这个根节点下标识数组第一个数,所以原创 2014-06-13 01:15:20 · 626 阅读 · 0 评论 -
查找系列之二叉排序树
二叉排序树的创建、查询、插入与删除 一、简述二叉排序树的思想: 动态查找表中主要有二叉树结构和树结构两种,而二叉树结构分为二叉排序树和平衡二叉树,树结构分为B-树和B+树等。 二叉排序树可以是一颗空树二叉排序树的性质:二叉排序树上的节点满足左子树 也就是说二叉排序树必须有顺序,且满足左子树二、构建二叉排序树 创建二叉排序树通常原创 2014-07-09 15:13:17 · 1494 阅读 · 0 评论