自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 java中main方法详解

main方法的形式:public static void main(String args[])。我们介绍各个字段的含义:public static:表示此方法可以被外部调用,当执行命令"java 类名",则会执行该类中的main方法。调用时不需要实例化这个类的对象,而是通过类名直接调用,因此需要声明为public static。void:主方法是程序的起点,所以不需要任何的返回值。

2015-10-29 16:32:56 599

原创 this关键字的用法

1.表示类中的属性(为了明确表示是类中的属性)class Person{ private String name; private int age; public Person(String name, int age){ this.name = name;//表示当前对象的name属性 this.age = age;//表示当前对象的age属性 }};2.使用this关键字

2015-10-26 22:38:01 474

原创 String中赋值操作和比较操作

1.实例化String对象String name01 = "Tom";//直接赋值String name02 = new String("Tom");//通过new关键字赋值2.String对象的两种比较方式(1)通过(==)比较String str1 = "hello";String str2 = new String("hello");String str3 = str2;System

2015-10-25 21:22:09 558

原创 深度优先遍历之边的分类

根据在图G上进行深度优先搜索所产生的深度优先森林,可以把图中的边分为四类:(1)树边:是深度优先森林中的边。如果顶点v是在探测边(u,v)时首次被发现的,那么(u,v)就是一条树边。(2)反向边:是深度优先树中,连接顶点u到它的某一祖先顶点v的那些边。有向图中可能出现的自环也被认为是反向边。(3)正向边:是指深度优先树中,连接顶点u到它的某个后裔v的非树边(u,v)。(4)交叉边:

2015-10-20 21:46:39 3146

原创 广度优先搜索之最短路径

广度优先搜索算法可以得到从已知源点到每个可达顶点的最短距离,此时的最短距离指的是路径上边的个数最少,使用parent数组记录当前顶点的父节点,比如parent[u] = v表示u的父节点为v。最短路径的长度记录在d数组中,比如d[v] = 3表示从源点(s)到v的最短路径为3。最后我们使用showPath()函数把最短路径输出。#include#include#include#include

2015-10-20 17:36:50 6429 3

原创 二进制中1的个数

题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。方法一:int oneNum01(int num){ int count = 0;//记录二进制中1的个数 while(num) { if(num % 2)//最后一位是1 count++; num = num >> 1;//原始的n

2015-10-19 19:53:25 363

原创 原码反码和补码

原码:最高位表示符号位,其余位表示值。比如用8位二进制表示+1和-1:[+1] = 0000 0001,[-1] = 1000 0001。正数变负数转换的过程我们只需要把最高位由0变为1。由负数变为正数,只需要把最高位1变为0。在原码中0值有[+0]和[-0]两种形式:[+0] = 0000 0000,[-0] = 1000 0000。八位二进制表示整数的范围为[-127,+127],在此范围中包

2015-10-19 17:07:02 582

原创 旋转数组的最小值

题目:把一个数组的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小值。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。解析:(1)我们可以用顺序查找的方法找到数组中的最小值,但是这个方法没有用到旋转数组局部有序的特点。(2)和二分查找法一样,我们用两个指针分别指向数组的第一个元素和最后

2015-10-17 21:44:49 287

原创 用两个队列实现栈

题目:用两个队列实现栈的三个基本操作,(1)出栈操作pop。(2)入栈操作push。(3)返回栈顶元素top()。解析:栈是先进后出,队列是先进先出。首先定义两个队列q1和q2,当进行入栈操作时,有两种情况:(1)q1和q2两者都为空,把入栈的元素插入到q1和q2中的任意一个。(2)如果q1(q2)不为空,把入栈元素插入到q1(q2)队尾。当进行出栈操作时,有两种情况:(1)q1和q2都为空,

2015-10-16 22:24:23 329

原创 用两个栈实现队列

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列的尾部插入节点和在队列的头部删除节点的功能。解析:队列的特点是先进先出,而栈的特点是后进先出。首先,我们声明两个栈s1和s2,入队列的元素,我们都插入在s1中。出队列的元素,我们都从s2中进行弹出元素。也就是appendTail操作只在s1中进行,deleteHead(int

2015-10-16 21:26:33 312

原创 逆向输出链表

在不改变链表结构的前提下,使用一个后进先出的数据结构(栈)存储正向遍历链表的结果,根据后进先出的特点:最后一个进入的数据最先被弹出,可以逆向打印出链表。我们也可以根据递归来逆向输出链表。#include#includeusing namespace std;//链表的节点类型struct Node{ int data; Node *next;};//在链表末尾插入一个元素v

2015-10-16 20:34:16 3200

原创 强连通分量

有向图的强连通分量是指:在强连通分量中的每一对顶点都存在一条路径可达,比如对于顶点对v和u,在强连通分量中v到u可达,那么u到v也可达。比如在左图中v1、v2、v3是一个强连通分量,v2也是一个强连通分量。强连通分量右图所示:

2015-10-16 10:31:45 722 1

原创 拓扑排序

在施工流程图或产品生产的流程图中,根据施工项目的顺序和产品生产顺序排序的过程,即拓扑序列。有向无环图的拓扑序列指的是:图中v1到v2有一条边,那么在拓扑序列中v1在v2之前,对于所有的顶点和边都适用。下面介绍两种求拓扑序列的方法:(1)在有向图中选择一个没有前驱的顶点输出。(2)从图中删除该顶点和所有以它为尾的弧。重复上述过程,直至全部的顶点输出,或者当前图中不存在无前驱的顶点为止。后

2015-10-15 21:06:48 1145

原创 无向图中的广度优先生成森林

广度优先生成森林的思路和深度优先生成森林的思路相同,在此不再复述,请看上一篇。#include#include#include#include#include#includeusing namespace std;struct CSTree{ int data; CSTree * lchild; CSTree * nextsibling;};void BFSTree(

2015-10-14 20:40:31 3610

原创 无向图中的深度优先生成森林

在对无向图进行遍历时,对于连通图,仅需要从图中的任意一个顶点出发,进行深度优先搜索或广度优先搜索,便可访问到图中所有顶点。对于非连通图,则需从多个顶点出发进行搜索,而每一次从一个新的起点出发进行搜索过程中得到的顶点访问序列恰为其各个连通分量中顶点集。对于非连通图,每个连通分量中的顶点集,和遍历时走过的边一起构成若干棵生成树,这些连通分量的生成树组成非连通图的生成森林。我们以孩子兄弟链表作为深度优先

2015-10-14 15:50:33 4708 1

原创 图的遍历之广度优先搜索

广度优先搜索遍历类似于树的按层次遍历的过程。假设从图中某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使用”先被访问的顶点的邻接点“先于”后被访问的顶点的邻接点“被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则选图中一个未被访问的节点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。若用邻

2015-10-13 20:35:18 1127

原创 图的遍历之深度优先搜索

深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。假设初始状态是图中所有的顶点未曾访问过,则深度优先搜索可从从中某个顶点出发,访问该顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问过,则另选图中一个未曾访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问过为止。当以邻接表作图的存储结构时,深度优先搜索遍历

2015-10-13 16:51:05 1137

原创 败者树

败者树:主要应用在外排序中,减少外排序内部排序的比较次数。在双亲节点记下刚进行完的这场比赛的败者,让胜者去参加更高一层的比赛,另外,根节点处加入一个节点来记录整个比赛的的赢者。便可以得到一棵败者树。败者树中的每个分支节点记录了比赛失败者而不是胜利者的索引。创建败者树,我们用数组ls记录参加比赛的选手,ls中元素的值表示当前选手的得分,比如ls{10,9,20,6,12},我们要选出得分最小的参加者

2015-10-12 20:39:45 1669

原创 桶排序

桶排序是一种十分简单的分配排序,数组中元素值的范围在[0,max),如果事先知道每个桶中有多少个元素,就可以对原数组进行排序。我们使用一个额外的大小为max数组记录每个元素出现的次数,额外数组的下标表示原数组中值的大小,我们遍历额外数组,每次访问一个元素,我们把它的下标记录在原数组中。例如当max = 10时,我们对数组arr{7,3,8,9,6,1,8,1,2},我们分配一个大小为10的额外数组

2015-10-10 15:42:04 327

原创 归并排序

归并排序简单地将原始数组划分为两个子数组,然后对每个子数组递归的排序,最后再将有序子数组合并,归并排序的主要步骤为:(1)将数组划分为两个子数组。(2)分别对两个子数组递归进行合并排序。(3)将这两个已经排好序的子数组合并为为一个有序的数组。归并排序是一种基于分治法的排序。归并排序的总的时间代价为o(nlogn),空间复杂度为o(n)。原始优化的归并排序:#includ

2015-10-09 20:19:04 508 1

原创 快速排序

快速排序是对冒泡排序的一种改进。它的基本思想是,通过一趟排序将待排序数组分割成独立的两部分,其中一部分元素均比另一部分元素的值要小,则可以分别对这两部分元素继续进行排序,以达到整个数组有序,在代码实现中,我们选择最后一个元素作为枢轴。用枢轴把数组元素分割成两部分。平均时间复杂度为o(nlogn)。#include#includeusing namespace std;int part

2015-10-09 15:52:13 375

原创 冒泡排序

冒泡排序的算法思想就是不停的比较相邻的元素值,如果不满足排序要求,就交换相邻记录,直到所有的元素都已经排好序为止。每次找到最大元素,把此元素放在最后。与插入排序不同的是,冒泡排序在对第i个元素进行排序时,不需要改动已排好序的的元素。冒泡排序是稳定的排序算法,最小的时间代价为o(n),最大时间代价为o(n*n),平均时间代价为o(n*n)。#includeusing namespace std

2015-10-08 17:29:47 302

原创 堆排序

堆有两种:最大堆和最小堆。我们介绍最小堆的排序算法。最小堆满足的条件:堆中每个父节点的值都要小于或等于其孩子节点的值。因此,最小堆的堆顶元素的值就是整个堆中的最小记录。堆排序的时间复杂度为o(nlogn)。建立堆的时间复杂度为o(N)。堆排序主要包括两个步骤:(1)对所有的元素建立最小堆。(2)取出堆顶元素与数组中的最后一个元素交换。#includeusing namespace

2015-10-08 16:43:23 241

原创 选择排序

选择排序的算法思想是逐个找出第i小的元素,并将这个元素与数组中的第i个位置的元素进行交换,第i小的元素 一次交换到位。选择排序是不稳定的排序算法。整个排序过程中最多需要n - 1次交换,选择排序总的时间代价为o(n * n),算法不依赖于原始数组的输入顺序,因此最大,最小,平均时间代价均为o(n * n)。#includeusing namespace std;void select_s

2015-10-08 10:52:40 276

原创 插入排序(顺序数组中找要插入元素的位置)

插入排序的算法思想十分简单,就是对待排序的数组进行处理,数组中的每个元素都同已排好的数组中的元素进行比较,然后插入到适当的位置。插入排序关键在于如何将待排元素插入到已经排好数组中的适当位置。方法一:使用顺序查找的方法,找到待排元素要插入的位置。/*插入排序:空间复杂度为o(1);数组为正序排列时,直接插入排序的时间复杂度为o(n);数组为逆序排列时,直接插入排序的时间复杂度为o

2015-10-08 09:56:25 1297

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除