
算法/数据结构
算法与数据结构
浮生spider
java软件工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序算法的C语言实现-冒泡排序
前面几个排序都很简单,只给出函数。void paopaoSort(int a[],int length){ int i,j,tmp; for(i=0;i<length;i++) { for(j=i;ja[j+1];j++) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } }}原创 2015-08-08 17:58:27 · 452 阅读 · 0 评论 -
javaweb使用POI导出导出excel表格
由于工作的需要,需要用java将数据库中的数据导出为Excel表格,这就用到了Apache的POI组件,该组件让我们能够自定义创建Excel工作薄,然后导出文件即可。1.首先准备好POI的包,使用maven导入或者直接加载jar都可以。我是下载了poi-3.11-20141221.jar,poi-ooxml-3.11-20141221.jar,poi-ooxml-schemas-3.11-原创 2016-03-01 15:07:32 · 740 阅读 · 0 评论 -
散列表的C语言实现-分离链接法
一:散列表的定义:散列表的实现常常叫做散列,散列是一种用于以常数平均时间执行插入,查找,删除的技术,但是,那些需要元素间任何排序信息的操作将不会得到支持,如findmin,findmax等等。散列表的优点很明显,它的查询时间为常数,速度非常快,缺点就是元素间没有排序,对于一些需要排序的场合不适用。理想的散列表数据结构就是一个包含有关键字的具有固定大小的数组,用一个散列函数来跟据关键字的值来将关原创 2015-08-04 17:31:44 · 3690 阅读 · 4 评论 -
AVL树的C语言实现
AVL树是带有平衡条件的二叉查找树。之所以需要平衡是因为有的二叉查找树很糟糕,像这样 上一篇文章中二叉查找树的删除总是用右子树的左子树叶子来代替删除节点操作容易造成左子树比右子树深很多的情况(每次删除的都是右子树的节点)。一颗AVL树是其每个节点的左子树和右子树高度最多差1的二叉查找树。空树的高度定义为-1.因为添加了平衡条件,所以我们在编写AVL树的基本操作时需要加入是否平衡的判断,以及原创 2015-08-03 12:10:35 · 626 阅读 · 0 评论 -
树
一:树的定义树可以用几种方式定义。定义树的一种自然方式是递归的方法。一颗树是一些节点的集合,这个集合可以是空集,若非空,则一颗树由称作根的节点R以及0个或多个非空的树T1,T2...Tk组成,这些子树中没一颗的根都被来自根R的一条有向的边所连接。树其实就是由N个节点和N-1条边组成,边在编程中大部分情况下由指针来描述。实现树的一种方法可以是在每一个节点除数据外还要有一些原创 2015-08-02 13:35:01 · 476 阅读 · 0 评论 -
二叉查找树的C语言实现
一:二叉树二叉树是一颗树,其中么个节点的儿子数目都不能超过俩个。二叉树的实现:因为一颗二叉树最多有俩个儿子,所以我们可以用指针直接指向他们。这种定义和链表定义相同:Typedef struct TreeNode *ptrToNode;Typedef struct ptrToNode Tree;Struct TreeNode{ElementType Element;Tree left;Tree ri原创 2015-08-02 13:57:52 · 534 阅读 · 0 评论 -
图算法之拓扑排序
拓扑排序是对有向无圈图的顶点的一种排序,它使得如果存在一条从vi到vj的路径,那么在排序中Vj出现在Vi后面。一个简单的求拓扑排序的算法是先找出任意一个没有入边的顶点,然后我们显示该顶点,并将它和它的边一起从图中删除。然后为们对图的其余部分应用同样的方法处理。但是这个方法有一点不好,就是每次都要找入度为0的顶点,这种顶点一般很少,如果图很大的话,每次都遍历一遍就浪费很多时间。升级版是先计算每一个顶原创 2015-08-11 22:30:48 · 2923 阅读 · 0 评论 -
队列的C语言实现
队列不同于栈,它是先进先出,即先入队列的元素提取时也要先出队列。队列可以用数组实现也可以用链表实现,挺简单的,但是很有些情况下很有用。它的实现只要维持好队首和队尾指针就好了。下面是我实现的链表队列。queue.h#ifndef __QUEUE_H#define __QUEUE_H#include #include struct QueueNode;struct queue;原创 2015-08-11 22:13:58 · 601 阅读 · 0 评论 -
图的基本知识
一:图的定义一个图G=(V,E)由定点集V和边集E组成,每一条边都是一个点对(v,w),其中v,w属于V。如果点对是有序的,那么图就叫做有向的。有向的图有时也叫做有向图。定点v,w邻接当且仅当(v,w)属于E。有时候边还有第三种成分,称为权或值。图的一条路径是一个顶点序列W1,W2,W3~Wn,使得(Wi,Wi+1)属于E,这样一条路径的长是该路径上的边数,它等于N-1.。从一个顶点到它自原创 2015-08-11 11:34:28 · 743 阅读 · 0 评论 -
散列表的C语言实现-开放定址法
头文件:#ifndef __HASHTABLE_H#define __HASHTABLE_H/*********************(平方)开放定址散列法***************///如果有冲突发生,那么就尝试另外的单元,直到找到空的单元为止typedef unsigned int index;typedef index position;typedef int E原创 2015-08-09 11:25:07 · 2016 阅读 · 0 评论 -
排序算法的C语言实现-快速排序
快速排序是在实践中最快的已知排序算法,它的平均运行时间是O(NlogN),该算法之所以特别的快,主要是由于非常精炼和高度优化的内部循环。它的最坏情形的性能为N^2.快速排序由下列简单的四步组成:1.如果S中元素个数是0或1,则返回。2.取S中任以元素V,称之为枢纽元3.将S分成俩个不相交的集合,前一个元素都小于V,后一个元素都大于V。4.返回quicksort(S1)后,加上V原创 2015-08-09 11:14:37 · 1382 阅读 · 0 评论 -
排序算法的C语言实现-堆排序
堆(优先队列)可以用于花费NlogN时间的排序,基于该想法的算法叫做堆排序。因为堆的根总是最大的或者最小的,所以我们可以先将输入数组转换为最大或者最小堆,然后删除最大(最小值)也就是删除根。这在二叉堆的介绍中已经实现了。一种方法是将删除的元素放入另一个数组,但是这样会浪费一倍的内存空间。由于每次删除后堆的最后一个位置是空的,所以另一种方法是将删除的元素放入最后的位置。如果是最大堆,那结果就是顺序的原创 2015-08-09 10:28:48 · 3132 阅读 · 0 评论 -
排序算法的C语言实现-希尔排序
希尔排序和冒泡排序有点相似,但是不同的是希尔排序使用一个序列h1,h2.........hi,叫做增量序列。在使用增量hk排序后,所有像个hk的元素都被排序。希尔排序冲破二次时间屏障的第一批算法之一。它有一个重要性质:Hk排序的文件(此后将是Hk-1排序)将保持它的Hk排序性,这样各趟排序结果就不会打乱前面的排序。希尔排序的性能在实践中完全可以接受,即使是对于计算数以万计的length仍是如此,编原创 2015-08-08 21:57:02 · 618 阅读 · 0 评论 -
排序算法的C语言实现-归并排序
归并排序以O(NlogN)最坏时间运行,而说使用的比较次数几乎是最优的,它是递归算法的一个很好的实现。这个算法中基本的操作是合并俩个已排序的表,因为这俩个表是已排序的,说以如果将输出放到第三个表中时该算法可以通过对输入数据一趟排序来完成。基本的合并算法是取俩个输入数组A和B,一个输出数组C,以及三个计数器Aptr,Bptr,Cptr,它们的位置于对应数组的开端。A[Aptr]和B[Bptr]中的较原创 2015-08-09 10:53:55 · 1789 阅读 · 0 评论 -
排序算法的C语言实现-插入排序
接下来的几篇文章编写一下几种常见的排序算法。大部分都是在《数据结构与算法分析-C语言描述》这本书上看的。void insertionSort(int a[],int length){ int i,j,tmp; for(i=1;i<length;i++) { tmp=a[i]; for(j=i;j>0&&a[j-1]>tmp;j--) { a[j]=a[j-1];原创 2015-08-08 17:55:23 · 414 阅读 · 0 评论 -
MYSQL索引
前言:索引是存储引擎用于快速找到记录的一种数据结构,索引对于良好的性能非常关键,索引能够轻易将查询性能提高几个数量级。索引的概念和一本书的目录是一样的,想要在一本书中快速的找到特定主题,一般是先看书的目录,然后再去特定的页码,在MYSQL中也是一样的,存储引擎用类似的方法使用索引,先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。下面会介绍一些索引相关的知识。一.索引的类型...原创 2018-12-26 00:14:41 · 181 阅读 · 0 评论