随笔分类 -  数据结构和算法

摘要:索引是一种数据结构,一般采用B-tree、R-tree或者Hash结构,R-tree常用来查询比较接近的数据,B-tree用来查找范围的数据,能够很快的从当前数据查找到下条数据;hash常用来查询随机访问的数据,查询每条数据的时间几乎相同。对于查找一段时间范围内的数据采用b-树就比hash快。B-t... 阅读全文
posted @ 2014-04-17 20:58 weilq 阅读(165) 评论(0) 推荐(0)
摘要:计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n+k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。但是,计数排序可以用在基数排序中 阅读全文
posted @ 2013-12-12 20:52 weilq 阅读(291) 评论(0) 推荐(0)
摘要:快速排序算法是我们用的最佳的排序算法,虽然它的最坏时间为O(n2),但是它平均性能较好,期望运行时间O(nlgn)。另外它能够进行原地排序。 1 #include 2 int partition(int a[],int p,int r); 3 void qSort(int a[],int p,int r); 4 5 int main() 6 { 7 int a[9]={9,5,6,8,2,4,3,1,7}; 8 qSort(a,0,8); 9 for(int i=0;ix)41 j--;42 if(i<j)43 ... 阅读全文
posted @ 2013-12-12 15:25 weilq 阅读(216) 评论(0) 推荐(0)
摘要:堆排序具有合并排序(时间复杂度O(nlgn)低)和插入排序(空间消耗少)的优点。#include#include#include#include#define MAX 10int size;int MAX_Heapify(int A[],int i){ int l,r,largest; l = i*2+1; r = i*2 + 2; if(l A[i]) largest = l; else largest = i; if(r A[largest]) largest = r; if(largest != i) { int tmp = A[i]; A[i] = A[largest];... 阅读全文
posted @ 2013-12-10 17:09 weilq 阅读(197) 评论(0) 推荐(0)
摘要:插入排序和归并排序使我们见得比较多的排序算法,插入排序的时间复杂度是O(n2),空间复杂度为1。归并排序的时间复杂度为O(lgn),空间复杂度为n。下面为自己c语言实现的归并排序和插入排序。 1 #include 2 void mergeSort(int a[],int p,int r); 3 void merge(int a[],int p,int q,int r); 4 void insertSort(int a[]); 5 int main() 6 { 7 int a[9]={9,5,8,6,2,3,1,4,7}; 8 mergeSort(a,0,8);//归并 ... 阅读全文
posted @ 2013-12-09 20:39 weilq 阅读(447) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include//exit() 4 5 6 struct Arr//定义了一个数据类型,数据类型名字Arr 7 { 8 9 int *pbase;//基地址指针 10 int lenth;//数组长度 11 int cent;//数组实际大小 12 //int increment;//增战因子 13 }; 14 void init_arr(struct Arr *array, int lenth); 15 bool append_arr(struct Arr *array,int dat... 阅读全文
posted @ 2013-11-22 15:36 weilq 阅读(739) 评论(0) 推荐(0)
摘要:数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。1、线性结构 a、连续存储 数组 b、离散存储 链表常用的线性数据结构有栈、队列:栈的c语言描述:#include#include#define DataType int#define MAXSIZE 1024typedef struct{DataType data[MAXSIZE];int top;}SeqStack;SeqStack *Init_SeqStack()//栈初始化{SeqStack *s;s=(SeqStack *)malloc(sizeof(SeqStack));if(!s){pr.. 阅读全文
posted @ 2013-11-21 16:46 weilq 阅读(223) 评论(0) 推荐(0)
摘要:B+树与B*树小结一、B+树1.B+树定义与特性B+树是B-树的变体,也是一种多路搜索树:其定义基本与B-树同,除了:1).非叶子结点的子树指针与关键字个数相同;2).非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);3).为所有叶子结点增加一个链指针;4).所有关键字都在叶子结点出现为了全面 这里给出网上另外一种说法:一棵m阶的B+树和m阶的B树的差异在于: 1.有n棵子树的结点中含有n个关键字; (而B 树是n棵子树有n-1个关键字) 2.所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自 阅读全文
posted @ 2013-11-20 20:48 weilq 阅读(1788) 评论(0) 推荐(0)