2014年3月30日
摘要: 二叉树的定义: 是一颗空树或者具有以下性质 1.结点最多只有两个孩子,且有左右之分。不能交换左右孩子 2.结点点的左子树和右子树也是二叉树。例图 二叉树的基本形态:二叉树中的术语: 1).结点度:节点所拥有的字数的个数成为该节点的度,在二叉树中度的取值只能是0,1,2. 2).叶节点:度为0的节点成为叶结点或终端结点。 3).左孩子、右孩子、双亲:树中一个结点的子树的根结点称为这个结点的孩子。这个结点称为它孩子结点的双亲。具有同一个双亲的孩子结点互称为兄弟。 4).路径、路径长度:如果一棵树的一串结点n1,n2,…,nk有如下关系:结点ni是ni+1的父结点(1≤i... 阅读全文
posted @ 2014-03-30 16:03 水目沾 阅读(594) 评论(0) 推荐(0) 编辑
  2014年3月29日
摘要: 希尔排序算法简介: 希尔排序属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。 排序过程:先取一个正整数d1 2 3 using namespace std; 4 5 //希尔排序 6 void shellSort(int iarr[],int length) 7 { 8 int dt[3] = {5,3,1},i =0 ,j,k,temp; 9 for(j = 0; j = 0)16 {17 iarr[k + dt[j]] = iarr[k];18 k -= dt... 阅读全文
posted @ 2014-03-29 11:04 水目沾 阅读(1772) 评论(0) 推荐(0) 编辑
  2014年3月28日
摘要: 插入排序算法简介: 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置插入排序算法思想: 一般来说,插入排序都采用in-place在数... 阅读全文
posted @ 2014-03-28 22:50 水目沾 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 快速排序算法: 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序思想: 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面, 这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就... 阅读全文
posted @ 2014-03-28 11:26 水目沾 阅读(314) 评论(1) 推荐(0) 编辑
摘要: 前言:今天我来介绍下堆排序,在写堆排序代码之前,我们要知道堆的概念! 堆的定义:n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1)ki=号。//k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树: 树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 堆的分类: 1).大根堆和小根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆... 阅读全文
posted @ 2014-03-28 10:02 水目沾 阅读(597) 评论(1) 推荐(0) 编辑
摘要: 归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。比较 归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录 1(1) 3(2) 2(3) 2(4) 5(5) (括号中是记录的关键字)时输出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序.. 阅读全文
posted @ 2014-03-28 00:47 水目沾 阅读(269) 评论(0) 推荐(0) 编辑
  2014年3月27日
摘要: 参考:http://baike.baidu.com/view/254413.htm算法原理 冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值。 所以,冒泡排序最好的时间复杂度为O(n)。 若初始文件是反序的,需要进行n2趟排... 阅读全文
posted @ 2014-03-27 20:53 水目沾 阅读(455) 评论(0) 推荐(0) 编辑
  2014年3月25日
摘要: 第一题:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。 下面是我写的代码: 1 #include 2 3 using namespace std; 4 5 void string 阅读全文
posted @ 2014-03-25 20:53 水目沾 阅读(246) 评论(0) 推荐(0) 编辑
  2014年3月18日
摘要: 初学容器,容易犯错的地方1.vector,list和deque都是顺序容器。其中vector和deque都可以通过下标访问,而list不能2. 容器的begin和end操作 c.begin()返回一个迭代器,它指向容器c的第一个元素 c.end()返回一个迭代器,它指向容器c的最后一个元素的 c.rbegin()返回一个逆序迭代器,它指向容器c的最后一个元素 c.rend()返回一个逆序迭代器,它指向容器c的第一个元素的前面一个元素 注意以上操作的返回的迭代器类型,前两个是iterator,后面一个是reverse_iterator。乱了顺序是不行的请看下面一段代码: 1 #inc... 阅读全文
posted @ 2014-03-18 20:18 水目沾 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 除第二章介绍的是C++的基本类型,本章将大致介绍一下C++定义的内容丰富的抽象数据库类型标准库。着重介绍一下sting、vector和bitset。3.2标准库string类型 1.string类型支持几个构造函数。构造函数是一个特殊成员函数,定义如何初始化该类型的对象,以下是string类型常用的构造函数。当没有明确指定对象初始化式时,系统将调用默认构造函数几种初始化string对象的凡是string s1默认构造函数,s1为空串string s2(s1)将s2初始化为s1的一个副本string s3(s2)将s3初始化为一个字符从字面值副本string s4(n,'c')将 阅读全文
posted @ 2014-03-18 19:38 水目沾 阅读(138) 评论(0) 推荐(0) 编辑