
数据结构与算法
大煤球
大家好!我是大煤球!
展开
-
排序总结
排序:对一序列对象根据某个关键字进行排序;稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 排序耗时的操作:比较、移动;转载 2016-07-29 10:28:04 · 286 阅读 · 0 评论 -
动态查找——二叉排序树
动态查找表: 表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。二叉排序树:(1)若他的左子树不为空,且左子树上所有的结点均小于它的根结点的值,(2)若他的右子树不为空,且右子树上所有的结点均大于它的根结点的值,(3)它的左右子树也分别为二叉排序树。二叉排序树又称二叉查找树,二叉树不为空时,首先将给转载 2016-10-08 17:11:08 · 1036 阅读 · 0 评论 -
静态查找——顺序查找、折半查找
查找 在查找表中确定一个元素,其关键字与给定值相等。若表中存在这样的一个元素,则查找成功,相反不成功。查找分为静态查找(顺序查找、折半查找)和动态查找(二叉树、哈希表)顺序查找:顺序存储结构。从表的最后一个元素开始,给定值逐个的和表中的元素进行比较,若比较相等,则查找成功。相反表中不存在要查的元素,查找失败。时间复杂度O(n),算法简单适用广,对查找表结构无要求,但是平均查原创 2016-10-06 19:34:34 · 823 阅读 · 0 评论 -
KMP算法
转自http://billhoo.blog.51cto.com/2337751/411486 【KMP算法简介】 KMP算法是一种改进后的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。通过一个辅助函数实现跳过扫描不必要的目标串字符,以达到优化效果。转载 2016-08-24 17:08:36 · 279 阅读 · 0 评论 -
内排序-归并排序
归并排序 内排序 稳定的排序,平均均时间复杂度O(nlogn)归并排序原理:采用分治的思想,先分解,再合并将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。综上可知:归并排序其实要做两件事:(1)“分解转载 2016-08-12 15:10:39 · 299 阅读 · 0 评论 -
内排序-选择类排序-堆排序
原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6709644堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子转载 2016-08-19 15:37:25 · 283 阅读 · 0 评论 -
内排序-选择类排序-简单选择排序
简单选择排序 内排序 选择类排序 稳定 的排序,平均时间复杂度O(n^2)简单选择排序原理:待排序序列,第一次遍历一遍选择值最小元素和第一个元素互换(如果第一个元素已经是最小值了,就不用交换),第二次从余下的n-1个元素中找出值最小与n-1个元素中的第一个元素互换,相同的道理,进行n-1次互换。举例:10,5,7,25,30,48,21,3第1趟排序:3原创 2016-08-01 16:38:43 · 385 阅读 · 0 评论 -
内排序-交换类排序-快速排序
快速排序 : 内排序 交换类排序 不稳定 的排序,平均时间复杂度为O(nlogn) 快速排序原理:快速排序是一种速度非常快的排序方法,在待排序列元素中任意选取一个元素作为分界点,把所有比这个元素值小的数放在左边,把所有比这个元素值大的数放在右边。这样一趟排序下来,序列被分为左右两个子序列,左边序列所有的元素都比分界值小,右边序列所有元素都比分界值大。接着对左右两个子序原创 2016-07-30 14:44:22 · 330 阅读 · 0 评论 -
内排序-插入类排序-希尔排序
希尔排序:内排序 插入类排序 不稳定 的排序,平均时间复杂度O(nlogn)~O(n^2)希尔排序的原理:希尔排序是对直接插入排序的一种改进,减小了时间复杂度,希尔排序又称减小增量排序。将待排序列按照增量 d 分成若干子序列,对子序列进行直接插入排序。然后减小增量d,将序列再分为若干子序列,再对子序列进行直接插入排序。待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直原创 2016-07-31 13:51:22 · 360 阅读 · 0 评论 -
静态链表
实现静态链表的方法定义一个较大的结构数组作为备用结点空间(即存储池)。当申请结点时,每个结点应含有两个域:data域和cursor域。data域用来存放结点的数据信息,此时的cursor域不在是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。数组的第0个分量可以设计成表的头结点,头结点的next域指示了表中第一个结点的位置。表中当前最后一个结点的域转载 2015-11-10 10:40:46 · 538 阅读 · 0 评论 -
参数传递
关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~下文会通过例子详细说明哦值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递:形参为指向实参转载 2015-11-27 16:03:42 · 454 阅读 · 0 评论 -
内排序-插入类排序-直接插入排序
直接插入排序: 内排序 插入类排序 稳定 的排序 平均时间复杂度O(n^2)直接插入排序原理:依次将待排序的序列元素,按照元素的大小,插入到前面的有序序列中,一个有n个元素的序列,要经过n-1次插入操作。举例:10,5,7,25,30,48,21,3第1次插入操作:第2个元素插入到前面的有序序列中,得到序列:5,10,7,25,30,48,21,原创 2016-07-30 16:19:34 · 405 阅读 · 0 评论 -
内排序-交换类排序-冒泡排序
冒泡排序: 内排序 交换类排序 稳定 的排序,平均时间复杂度O(n^2)原创 2016-07-29 19:13:34 · 338 阅读 · 0 评论