2007winter

做自己真心想做的事,你就没事了

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

2012年6月8日

摘要: 所谓归并(merging)是将链两个或两个以上的有序表合并成一个新的有序表。先考虑一种特殊情形:设线性表L[1:n]中的某段L[low:high]已经部分有序,即它的两个子表L[low:mid]与L[mid+1:high]已经有序,现要将这两个有序子表归并成一个有序子表L[low:high]。实现上述两个子表的归并,基本做法如下:(1) 开辟一个与线性表L同样大小的表空间A;(2) 设置三个指针i,j,k,其初始状态分别指向两个有序子表的首部及表空间A中与L中需要进行排序段相对应空间的首部。即i=low, j=mid+1, k=0;(3) 沿两个有序子表扫描:若L[i]<L[j],则A[ 阅读全文
posted @ 2012-06-08 15:15 2007winter 阅读(141) 评论(0) 推荐(0)

摘要: 希尔排序是一种插入排序方法,实际上是一种分组插入方法。其基本思想是:先取一个小于n的整数d1作为第一个增量,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序;然后,取第二个增量d2<d1,重复上述的分组和排序,直至所取的增量dt=1,即所有记录放在同一组中进行直接插入排序为止。希尔排序是不稳定的。代码:#include <iostream>using namespace std;void shellsort(double R[],int n){ int i,j,increment; double temp; increment=n/2; while (... 阅读全文
posted @ 2012-06-08 10:58 2007winter 阅读(121) 评论(0) 推荐(0)

摘要: 选择排序的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的序列,选择排序需要扫描n-1遍,每一遍扫描均从剩下的子表中选出最小的元素,然后将该最小的元素与子表中的第一个元素进行交换。第i趟排序开始时,当前有序区和无序区分别为R[0…i-1]和R[i…n-1],该趟排序则是从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[0…i]和R[i+1…n-1]分别为新的有序区和新的无序区。因为每趟排序均使有序区中增加了一个记录,且有序区中的记录关键字均不大于无序区中 阅读全文
posted @ 2012-06-08 10:25 2007winter 阅读(158) 评论(0) 推荐(0)

2012年6月7日

摘要: 快速排序是由冒泡排序改进而得的,也是交换排序的一种。快速排序的基本思想如下:从线性表中选取一个元素,设为T,然后将线性表后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表分成了两部分(称为两个子表),T插入到其分界线的位置处。这个过程称为线性表的分割。通过对线性表的一次分割,将线性表分为前后两个字表,且前面子表中的所有元素均不大于T,而后面子表中的所有元素都不小于T。如果对分割后的子表再按上述原则进行分割,并且这种分割可以一直做下去,直到所有子表为含有一个元素,此时线性表就变成了有序表。快速排序的平均时间复杂度为O(nlogn),它是不稳定的。代码:#include < 阅读全文
posted @ 2012-06-07 15:26 2007winter 阅读(119) 评论(0) 推荐(0)

摘要: 冒泡排序是一种典型的交换排序方法,其基本思想是:从第一个记录R1开始,对每两个相邻的关键字ki和ki+1进行比较,若ki>ki+1,则交换Ri和Ri+1的位置 ,使关键字较小的记录换到关键字较大的记录之前。经过一趟冒泡排序后,关键字最小的记录到达最前端,接着,在剩下的记录中找关键字次小的记录,并把它换在第二个位置上。以此类推,一直到所有记录都有序为止。冒泡排序的平均时间复杂度为O(n2),它是稳定的。代码:#include <iostream>using namespace std;#define T double//升序void bubble_sort(T R[],int 阅读全文
posted @ 2012-06-07 10:12 2007winter 阅读(129) 评论(0) 推荐(0)

摘要: 插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完为止。假设待排序的记录存放在数组R[0,...,n-1]中,排序过程的某一中间时刻,R被划分成两个子区间R[0,...,i-1]和R[i,...,n-1]。其中,前一个子区间是已排好序的有序区;后一个子区间是当前未排序的部分,不妨称其为无序区。直接插入排序的基本操作是将当前无序区的第1个记录R[i]插入到有序区R[0,...,i-1]中适当位置上,使R[0,...,i]变为新的有序区。这种方法通常称为增量法,因为每次使有序区增加1个记录。直接插入排序的时间复杂度为O(n2),它是 阅读全文
posted @ 2012-06-07 09:58 2007winter 阅读(122) 评论(0) 推荐(0)

2012年6月4日

摘要: 将数据和二叉链表的各种运算(如二叉链表的生成,二叉链表的前序、中序、后序遍历)封装在一起,构成二叉链表类。Binary_Tree.h:#include <iostream>using namespace std;//定义二叉链表结点类型template<class T>struct Btnode{ T d; Btnode *lchild; Btnode *rchild;};//二叉链表类template<class T>class Binary_Tree{private: Btnode<T> *BT;public: Binary_Tree() { 阅读全文
posted @ 2012-06-04 11:11 2007winter 阅读(224) 评论(0) 推荐(0)

2012年6月1日

摘要: (1) 声明类模板时要增加一行template<class 类型参数名>在template后面的尖括号内的内容为模板的参数表列,关键字class表示其后面的是类型参数(虚拟类型参数)。实现一类多用。(2)声明一个类模板后,怎样使用它?怎样使它变为一个实际的类?必须用实际类型去取代虚拟类型1.类模板名<实际类型名>对象名;2.类模板名<实际类型名>对象名(实参列表);如:compare<int> cmpl;compare<int> cmpl(3,7);(3)如果在类模板外定义成员函数,应写成类模板形式:template<class 阅读全文
posted @ 2012-06-01 18:59 2007winter 阅读(116) 评论(0) 推荐(0)

2012年5月19日

摘要: 转自:http://blog.renren.com/blog/230264010/8467871551.我喜欢写代码。如果看到这一句话你心生厌恶、怜悯和不理解,那么我从内心深处表示遗憾。同样的道理,如果别人对我说他喜欢捣腾仪器试剂,我觉得没有比那再枯燥的了。所以我遗憾他们一生中缺少代码,就像有人能为我一生中可能不会一件乐器而感到遗憾一样。而使我真正同情的人,是那些摇动着计算机科学大旗,却鼓吹着自己不必写代码的人。他们觉得自己足够精明,参透了一切码农到最后都是流血流泪出卖劳动力的道理,觉得老子搞的只是科学,又不是搞的代码。这样的人,如果最后能像霍金一样在轮椅上发光,照得世人眼睛瞎掉,那还了得,否 阅读全文
posted @ 2012-05-19 21:50 2007winter 阅读(142) 评论(0) 推荐(0)

2012年5月14日

摘要: 转自:http://blog.sina.com.cn/s/blog_541caaee0100yzid.html部分Mathtype公式与文档文字不能很好的对齐,而是浮起来了,也就是说Mathtype公式的位置比正常文字稍高,这是我写论文时碰到的一个很麻烦的问题。然后就是行距稍微大了点。现总结如下:1、文件,页面设置,文档网格,无网格,确定。这样就不会因为公式把行距撑得很大。2、字体,字符间距,位置,标准;格式,段落,中文版式,对齐方式,居中。这样公式和文字在水平方向上的中心就是一致的了。其实,最重要的是第一条,有时只要设置第一条即可。 阅读全文
posted @ 2012-05-14 16:12 2007winter 阅读(797) 评论(0) 推荐(0)