摘要: 快速排序(QuickSort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。// 快速排序void CExchangeSort::QuickSort(void){ const int count = 9, length = count -1; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; int low = 1; int high = length; QuickSort(L, low, hig. 阅读全文
posted @ 2011-05-01 22:12 星晨_jqren 阅读(889) 评论(0) 推荐(0) 编辑
摘要: 起泡排序(BubbleSort),依次比较相邻的两个记录的关键字,逆序时交换,一趟比较后最大的记录被安置到最后一个记录的位置上。时间复杂度为O(n^2)。void CExchangeSort::BubbleSort(void){ const int count = 9, length = count -1; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; bool change = true; for (int i = count - 1; i > 0 && change; -- i) { change = fals 阅读全文
posted @ 2011-04-30 20:53 星晨_jqren 阅读(742) 评论(0) 推荐(0) 编辑
摘要: 希尔排序(Shell’sSort)又称“缩小增量排序”(Diminishing Increment Sort),它也是一种属于插入排序类的方法,但在时间效率上较前述几种排序方法有较大的改进。时间复杂度为O(n^3/2)。理解:先将整个待排记录序列分割成为若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。void CInsertionSort::ShellSort(void){ const int count = 9, length = count -1; int L[count] = {0, 49, 38, 65, 97, 76, 13, . 阅读全文
posted @ 2011-04-28 21:23 星晨_jqren 阅读(775) 评论(0) 推荐(1) 编辑
摘要: 若希望在排序过程中不移动记录,只有改变存储结构,进行表插入排序。存储结构定义如下:#define SIZE 100 //静态链表容量typedef struct { string rc; //记录项 int next; //指针项}SLNode; //表结点类型typedef struct{ SLNode r[SIZE]; //0号单元为表头结点 int length; //链表当前长度}SLinkListType; //静态链表类型 为了方便插入,设数组中下标为“0”的分量为表头结点,并令表头结点记录的关键字取最大整数MAXINT。则表插入排序的过程描述如下:首先将静态链表中数组下标为“1. 阅读全文
posted @ 2011-04-28 20:27 星晨_jqren 阅读(706) 评论(0) 推荐(0) 编辑
摘要: 2-路插入排序是在折半插入排序的基础上再改进之,其目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。时间复杂度为O(n^2)。理解:所谓的2-路,是指优先插入在序列前面或后面,然后再考虑插入到中间。void CInsertionSort::Path2Insertion(void){ //元素0是哨兵。 const int count = 9, length = count -1; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; //对顺序表L作2-路插入排序。 int d[length] = { 0 }; d[0] = . 阅读全文
posted @ 2011-04-25 22:17 星晨_jqren 阅读(4367) 评论(1) 推荐(1) 编辑
摘要: 由于插入排序的基本操作是在一个有序表中进行查找和插入,这个“查找”操作可利用“折半查找”来实现,由此进行的插入排序称之为折半插入排序(Binary Insertion Sort)。时间复杂度为O(n^2)。理解:依次将每个待排序的记录插入到一个有序序列的合适位置。插入的位置是采用折半查找法确定的。void CInsertionSort::BinaryInsertion(void){ //元素0是哨兵。 const int count = 9; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; //对顺序表L作折半插入排序。 for (in. 阅读全文
posted @ 2011-04-24 22:28 星晨_jqren 阅读(1328) 评论(0) 推荐(0) 编辑
摘要: 直接插入排序(StraightInsertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。时间复杂度为O(n^2)。理解:依次将每个待排序的记录插入到一个有序序列的合适位置。插入的位置是和有序序列的每一个元素进行比较,然后确定的。void CInsertionSort::StraightInsertion(void){ //元素0是哨兵。 const int count = 9; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; //对顺序表作直接插入排序。. 阅读全文
posted @ 2011-04-23 20:40 星晨_jqren 阅读(823) 评论(0) 推荐(0) 编辑
摘要: P263 排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。 为了便于讨论,在此首先要对排序下一个确切的定义: 假设含n个记录的序列为:{ R1, R2, ... , Rn },其相应的关键字序列为:{ K1, K2, ... , Kn },需确定1, 2, ... , n的一种排列p1, p2, ... , pn,使其相应的关键字满足如下的非递减(或非递增)关系:Kp1 <= Kp2 <= ... <= Kpn,使序列成为一个按关键字有序的序列:{ Rp1, Rp2, ... , Rpn 阅读全文
posted @ 2011-04-22 23:02 星晨_jqren 阅读(677) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2011-04-21 22:17 星晨_jqren 阅读(2212) 评论(17) 推荐(10) 编辑
摘要: 19.1.解释概念:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。main(),客户CLiftState,电梯状态抽象类CCloseingState,电梯门关闭COpenningState,电梯门打开CRunningState,电梯运行CStoppingState,电梯停止CContext,电梯的控制面板说明:CContext保持电梯的状态,并提供操作的接口函数。当函数被调用时,CContext直接调用当前状态的相应函数。由状态的接口函数来确定是否可以执行这个动作,以及修改状态为执行这个动作后的状态。看代码:第一块是不使用模式的做法,第二块是使用模式的做法,在main 阅读全文
posted @ 2011-04-21 20:31 星晨_jqren 阅读(15509) 评论(11) 推荐(1) 编辑