算法和数据结构
Firewall1076
这个作者很懒,什么都没留下…
展开
-
排序(一)——几种简单的排序算法
一、冒泡排序 它的时间复杂度为O(n2),空间复杂度是O(1),是稳定的排序算法。稳定是指原序列中相同元素的相对顺序仍然保持到排序后的序列。 其基本思想是:经过n-1趟子排序完成,第i趟子排序从第1个数至第n-i个数,依次比较相邻的两个数,将小的数放在前面,大的数放在后面。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以转载 2013-11-18 20:28:13 · 729 阅读 · 0 评论 -
排序(四)——关于归并排序
参考:维基百科 以及 数据结构与算法分析——Java语言描述 (美)Mark Allen Weis等 归并排序算法的时间复杂度是 O(n logn) ,最差空间复杂度O(n) ,是稳定的排序算法。 它是建立在归并操作上的一种有效的排序算法,是采用分治法(Divide and Conquer)的一个非常典型的应用。这个算法中的基本的操作是合并两个已排序的表转载 2013-11-18 20:34:13 · 694 阅读 · 0 评论 -
排序(二)——关于希尔排序
参考:维基百科 以及 数据结构与算法分析——Java语言描述 (美)Mark Allen Weis等 希尔排序的时间复杂度根据步长序列的不同而不同,最差空间复杂度O(n),是不稳定的排序算法。 希尔排序的名称源于它的发明者Donald Shell。该算法是冲破二次时间屏障的第一批算法之一。它通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减转载 2013-11-18 20:31:17 · 672 阅读 · 0 评论 -
排序(五)——关于桶式排序
假设现在有一组小于M的正整数 a1、 a2 ,…… ,an ,对它们排序可以采用以下的思路:使用一个大小为M的数组buckets,这个数组的每一个单元称为一个个的bucket,桶,初始化全部为0。扫描数组a,当扫描到ai的时候,buckets[ai] 加1。这样当a扫描完之后,扫描buckets,打印非零单元的下标,它的值是几就打印几次。打印出来的值实际上就是排好序之后的数组a了。我们可以依次把它转载 2013-11-18 20:34:58 · 661 阅读 · 0 评论 -
排序(三)——关于堆排序
参考:数据结构与算法分析——Java语言描述 (美)Mark Allen Weis 堆排序的时间复杂度是O(N log N) 。堆排序是不稳定的。 首先介绍一下堆吧。堆是一颗被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。下图所示就是一个例子: 一颗高为h的完全二叉树有2h到 2h+1-1个转载 2013-11-18 20:32:15 · 775 阅读 · 0 评论 -
图(三)—— 赋权有向图的几个算法
参考:数据结构与算法分析——Java语言描述 (美)Mark Allen Weis 包括: 1、Djkstra算法求最短路径 2、深度优先遍历 3、广度优先遍历 4、拓扑排序算法 一、Djkstra算法 顶点类有三个属性值得注意:①boolea转载 2013-11-20 08:34:49 · 1902 阅读 · 0 评论 -
图(一)——实现用邻接表表示图
现在在看图。说是邻接表是用来表示图的标准方法,我照着自己的理解写了一个用来表示一个有向图,只是用来表示图而已,没有做任何其它的工作。也不知道规范不规范。[java] view plaincopy/** * 图的顶点 */ package com.mygraph; public class Vertex {转载 2013-11-20 08:32:57 · 969 阅读 · 0 评论 -
图(二)—— 一个有向无权图的最短路径算法
问题的描述是这样的:有一个有向无权图G,指定一个特定的顶点s作为起点,要求找出从s出发到G中的每一个其它顶点的最短路径。如下面的这个图: (用v1、v2、……作为每个顶点的名称吧。。。) 对于顶点类Vertex要存有两个信息,dist用来保存从s到此顶点的距离,path用来保存最短路径中的前一个顶点。比如说若此顶点是v7,开始顶点是v1,最短路径转载 2013-11-20 08:33:56 · 1482 阅读 · 0 评论