自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java对象及其引用

Java对象及其引用 一个对象引用可以指向0个或1个对象;一个对象可以有N个引用指向它(可以有N条绳子系住一个汽球)。

2010-11-10 16:25:00 194

原创 二分查找

<br />最开始学数据结构的时候,就知道了二分查找,后来发现《编程之美》之类的名著上也都提到了这个算法。现在,觉得讲“二分查找”讲得最好的是《编程珠玑》。《编程珠玑》上是根据循环不变式来讲二分查找的,并给出了几种不同的形式。<br /> <br />最常见的二分查找<br />伪代码如下:<br />在A[low,…,high]中查找val<br />Binary-search(A, low, high, val)<br />         While(low >= high)<br />       

2010-11-02 14:58:00 370

原创 冒泡排序

冒泡排序 算法

2010-11-02 14:49:00 494

原创 快速排序

<br /><br />思想:<br />快速排序也是一种交换排序,本质思想都是通过交换序列中的反序,直到没有反序对为止。它采用了分治策略,是对冒泡排序的一种改进。<br />快速排序的思想如下:分解——把一个元素(如R1)移动到在排序后的文件中它的最终位置上,同时重新排列其他元素,使得不小于R1的元素都位于它的右边,不大于R1的元素都位于它的左边。通过划分,把原来的问题划分为两个子问题。解决——递归调用快速排序算法分别对左边和右边的序列进行排序。合并——空操作,什么也没做。<br /><br /><br

2010-11-02 11:33:00 219

原创 简单选择则排序

<br />思想:<br />它是选择排序的一种,是以重复选择为思想的。<br />进行n次循环;在第i次循环中,选出第i小的元素,并把它放在第i个位置上。<br /> <br />伪代码:<br />SimpleSelect-Sort(A)<br />         For:i从1到length[A]<br />                   K=i<br />                   For:j从i+1到length[A]<br />                         

2010-11-02 11:03:00 234

原创 计数排序

<br />今天在论坛上看到一个关于计数排序的问题,刚好自己这几天在复习排序,所以就把自己的理解写下来。<br /> <br />定义:<br />计数排序:是一种非比较排序算法,因此其时间复杂度比O(nlgn)还要低,是O(n).<br />但是使用计数排序是有条件的:n个输入元素中每个都是介于1到k之间的整数,k是整数。<br /> <br />思想:<br />对每个输入元素x,确定出小于x的元素数,然后在直接把x放到它的最终位置上。<br /> <br />伪代码:<br />A:输入数组<br /

2010-11-02 10:08:00 179

原创 归并排序

思想: 归并排序是把两个或者两个以上的有序序列合并成一个新的有序序列。它的基本思想是:把数组A看做是n个有序的子序列组成,每个子序列长度为1。然后两两合并,得到n/2个长度为2的子序列;再继续两两合并。如此重复,直到得到一个长度为n的有序序列。 归并排序本质上是分治法。所谓分治法就是:把原问题分成n个规模较小而结构和原问题相似的子问题;递归地解决这些子问题,然后合并其结果就得到原问题的解。分治法在每一层递归上都有三个步骤:分解;解决;合并。 合并排序算法的步骤如下。1、分解:把n个元素分成各含n/

2010-11-01 19:28:00 210

原创 堆排序

<br /><br />思想:<br />堆排序本质上也是一种选择排序。选择排序是以“重复选择”为思想的。<br />堆排序算法需要一个辅助算法——堆调整算法。该算法保证元素构成一个堆。<br />在非降序排序中,使用的是大顶堆(根节点具有最大元素)。首先重新安排序列,使之形成一个大顶堆,然后反复撤销根元素(该步骤即是选择最大元素),并把它送到适当的位置上。<br /> <br /><br />伪代码:<br />而堆排序的所有操作可以看做以下两部分:<br />生成大顶堆<br />For:i从n到2<b

2010-11-01 19:20:00 252

原创

<br /><br />第一次接触堆,是在学习堆排序的时候,整个人都是糊糊的,搞不清楚那些操作到底在做什么。其实,堆本质上就是一颗特殊的完全二叉树。既然是一颗完全二叉树,就可以用数组来存储。它的特殊之处在于:根节点都不小(或者大)于子节点。对于堆的操作,如果违反了这个性质,那么就需要对堆进行调整。而调整堆无外乎两种方法:向上调整siftUp或者向下调整siftDown。下面先来看几个堆的性质:<br />已知一个内节点(非根节点)的下标是i,那么其父节点是i/2,其左孩子和右孩子分别是2*i和2*i+1。<

2010-11-01 19:18:00 210

原创 插入排序

<br />思想:<br />在所有对插入排序的解释中,觉得最好的就是《算法导论》中的类比——打牌时的整理手上牌:<br />开始时,所有牌都在桌子上,你的左手是空的。——所有的元素都是无序的<br />然后,从桌子上拿起一张牌,把它插入到左手中合适的位置上——取出一个元素,把它插入到已经排好序的部分序列中<br />为了给一张牌找到合适的位置,自右向左地与手中已有的每一张牌比较(关于顺序问题请注意:在《算法导论》的第一版上,写的是自左向右的顺序比较)<br />在任何时刻,左手上的牌都是已经排好序的——在

2010-11-01 19:03:00 172

原创 二叉树

自己在很多时候,都不怎么重视二叉树,包括在复习的时候。总觉得这个知识点很简单,但其实,二叉树是一个基础的基础。你敢保证你对它一清二楚吗?二叉树二叉树是n个节点的有限集,它或者是空集(n=0),或者由一个根节点及两颗互不相交的、分别称为左子树和右子树的二叉树组成。逻辑上二叉树有五种基本形态:空二叉树、只有一个根节点的二叉树、右子树为空的二叉树、左子树为空的二叉树、完全二叉树。性质1:二叉树第i层上的节点个数最多为2i-1(i>=1)性质2:深度为k的二叉树至多有2k-1个节点。20+21+…+2k-1=2k-

2010-11-01 18:37:00 281

空空如也

空空如也

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

TA关注的人

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