大话数据结构
GarfieldEr007
这个作者很懒,什么都没留下…
展开
-
《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
2.9 算法的时间复杂度 2.9.1 算法时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f转载 2015-07-16 14:04:28 · 1192 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.8 归并排序(下)
9.8.3 归并排序复杂度分析 我们来分析一下归并排序的时间复杂度,一趟归并需要将SR[1]~SR[n]中相邻的长度为h的有序序列进行两两归并。并将结果放到TR1[1]~TR1[n]中,这需要将待排序序列中的所有记录扫描一遍,因此耗费O(n)时间,而由完全二叉树的深度可知,整个归并排序需要进行⌈log2n⌉趟,因此,总的时间复杂度为O(nlogn),而且这是归并排序算法中转载 2015-07-18 19:10:36 · 1144 阅读 · 0 评论 -
《大话数据结构》第3章 线性表 3.8.2 单链表的删除
3.8.2 单链表的删除 现在我们再来看单链表的删除。设存储元素ai的结点为q,要实现将结点q删除单链表的操作,其实就是将它的前继结点的指针绕过,指向它的后继结点即可(如图3-8-5所示)。 我们所要做的,只是实际上就是一步,p->next=p->next->next,用q来取代p->next,即是q=p->next; p->next=q->ne转载 2015-07-18 18:44:02 · 1181 阅读 · 1 评论 -
《大话数据结构》第9章 排序 9.2 排序的基本概念与分类
9.2 排序的基本概念与分类9.2.1 排序的定义 排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录取时,会按成绩总分降序依次录取等。那排序的严格定义是什么呢? 假设含有n个记录的序列为{r1,r2,……,rn},其相应的关键字分别为{k1,k2,……,kn},需确定1,2,……,转载 2015-07-18 18:49:12 · 1206 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.5 直接插入排序
9.5.1 直接插入排序算法 扑克牌是我们几乎每个人都可能从事过的游戏。而最基本的扑克玩法都是一边摸牌,一边理牌。假如我们拿到了这样一手牌,如图9-5-1。啊,似乎是同花顺呀,别急,我们得理一理顺序才知道是否是真的同花顺。请问,如果是你,应该如何理牌呢? 应该说,哪怕你是第一次玩扑克牌,只要认识这些数字,理牌的方法都是不用教的。将3转载 2015-07-18 18:57:47 · 1109 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.9 快速排序(上)
9.9.1 快速排序介绍 终于我们的高手要登场了,如果将来你工作后,你的老板要让你写个排序算法,而你会的算法中竟然没有快速排序,我想你还是不要声张,偷偷去把快速排序算法找来敲进电脑,这样至少你不至于被大伙儿取笑。 事实上,不论是C++ STL、Java SDK或者.NET FrameWork SDK等开发工具包中的源代码里都能找到它的某种实现版本。转载 2015-07-18 19:12:46 · 1136 阅读 · 0 评论 -
《大话数据结构》样章试读
《大话数据结构》样章试读 各位童鞋,《大话数据结构》从写作到出版,虽然经历了一些坎坷,但终于还是在今天正式在一些网店发售了。现在提供两章的完整版试读PDF文件,希望能给您有所收获,并欢迎给出批评指正意见。 本应该直接贴出正文,但考虑到图片过多和排版格式较为复杂,为了能够原汁原味的体现原书风貌,所以就提供PDF文档阅读。样章试读《大话数据结构》第2章转载 2015-07-18 19:23:30 · 1285 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.6 希尔排序(下)
9.6.3 希尔排序算法 好了,为了能够真正弄明白希尔排序的算法,我们还是老办法——模拟计算机在执行算法时的步骤还研究算法到底是如何进行排序的。 希尔排序算法代码如下。void ShellSort(SqList *L){ int i,j; int increment=L->length; do { i转载 2015-07-18 19:01:19 · 1292 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.6 希尔排序(上)
9.6.1 变不可能为可能 给大家出一道智力题。请问“VII”是什么? 嗯,很好,它是罗马数字的7。现在我们要给它加上一笔,让它变成8(VIII),应该是非常简单,只需要在右侧加一竖线即可。 现在我请大家试着对罗马数字9,也就是“IX”增加一笔,把它变成6,应该怎么做? (几分钟后) 我已经听不少声音转载 2015-07-18 18:59:51 · 1268 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.9 快速排序(下)
9.9.4 快速排序优化 刚才讲的快速排序还是有不少可以改进的地方,我们来看一些优化的方案。1.优化选取枢轴 如果我们选取的pivotkey是处于整个序列的中间位置,那么我们可以将整个序列分成小数集合和大数集合了。但注意,我刚才说的是“如果……是中间”,那么假如我们选取的pivotkey不是中间数如何呢?比如我们前面讲冒泡和简单选择排序一直用到的转载 2015-07-18 19:15:12 · 1101 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.7 堆排序(上)
9.7.1 堆结构介绍 我们前面讲到简单选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n-1次。本来这也可以理解,查找第一个数据需要比较这么多次正常的,否则如何知道它是最小的记录。 可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较中,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行转载 2015-07-18 19:03:12 · 1151 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.3 冒泡排序(下)
9.3.2 冒泡排序算法 我们来看看正宗的冒泡算法,有没有什么改进的地方。/* 对顺序表L作冒泡排序 */void BubbleSort(SqList *L){ int i,j; for(i=1;ilength;i++) { for(j=L->length-1;j>=i;j--) /* 注意j是从后往前循环 */ { if(L->转载 2015-07-18 18:53:18 · 1250 阅读 · 0 评论 -
《大话数据结构》第1章 数据结构绪论 1.1 开场白
1.1 开场白 If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime. (如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子转载 2015-07-16 13:59:27 · 1204 阅读 · 0 评论 -
《大话数据结构》第2章 算法基础 2.8 函数的渐近增长
2.8 函数的渐近增长 我们现在来判断一下,两个算法A和B哪个更好。假设两个算法的输入规模都是n,算法A要做2n + 3次操作,你可以理解为先有一个n次的循环,执行完成后,再有一个n次循环,最后有三次赋值或运算,共2n + 3次操作。算法B要做3n + 1次操作。你觉得它们谁更快呢? 准确说来,答案是不一定的(如表2-8-1所示)。 当n转载 2015-07-16 14:02:37 · 1179 阅读 · 0 评论 -
《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?
1.2 你数据结构怎么学的? 早先我有一个学生叫蔡遥,绰号“小菜”。他前段时间一直通过E-mail与我交流,其中说起了他工作的一些经历,感慨万千。我在这里就讲讲小菜的故事。 他告诉我,在做我学生时,其实根本就没好好学数据结构,时常逃课,考试也是临时突击后勉强及格。毕业后,他几经求职,算是找到了一份程序员的工作。 工作中,有一次他们需要开发一个客转载 2015-07-16 14:01:31 · 1143 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.1 开场白
9.1 开场白 大家好!你们有没有在网上买过东西啊? 嗯?居然还有人说没有。呵呵,在座的都是大学生,应该很多同学都有过网购的经历。哪怕真的没有,也看到或听到过一些。现在网上购物已经相对成熟,对用户来说还是带来了很大的方便。假如我想买一台iphone4的手机,于是上了某电子商务网站去搜索。可搜索后发现(如图9-1-1),有8863个相关的物品,如此之多,转载 2015-07-18 18:47:12 · 1078 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.4 简单选择排序
9.4.1 简单选择排序算法 爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少。还有一种做股票的人,他们很少出手,只是在不断的观察和判断,等到时机一到,果断买进或卖出。他们因为冷静和沉着,以及交易的次数少,而最终收益颇丰。 冒泡排序的思想就是不断的在交换,通转载 2015-07-18 18:55:34 · 1240 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.7 堆排序(下)
9.7.2 堆排序算法 堆排序(Heap Sort)就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素中的次小值。如此反复执行,便能得到一个有序序列了。转载 2015-07-18 19:04:54 · 1300 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.8 归并排序(上)
9.8.1 归并排序介绍 前面我们讲了堆排序,因为它用到了完全二叉树,充分利用了完全二叉树的深度是⌊log2n⌋+1的特性,所以效率比较高。不过堆结构的设计本身是比较复杂的,老实说,能想出这样的结构就挺不容易,有没有更直接简单的办法利用完全二叉树来排序呢?当然是有。 先来举一个例子。你们知道高考一本、二本、专科分数线是如何划分出来的吗?转载 2015-07-18 19:07:20 · 1132 阅读 · 0 评论 -
《大话数据结构》简体中文版勘误
尽管已经很仔细的检查和审核,但错误还是没有能避免。以下的错误,有些是作者的笔误或者表述不清,有些是编辑审稿时不理解造成的错误,有些是美编改图时的错误,有些是印刷厂印刷时的错误。虽然出错的原因很多,但总的来说都会给读者阅读时造成困扰,所以再次向读者说一声对不起!并请读者时常关注本博文,以便可以获得最新的勘误信息。现勘误如下:注:★★★、★★和★为建议马上修改,它们之间程度不同,没有星为可转载 2015-07-18 19:20:00 · 2918 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.3 冒泡排序(上)
9.3.1 最简单排序实现 无论你学习哪种编程语言,在学到循环和数组时,通常都会介绍一种排序算法来作为例子,而这个算法一般就是冒泡排序。并不是它的名称很好听,而是说这个算法的思路最简单,最容易理解。因此,哪怕大家可能都已经学过冒泡排序了,我们还是从这个算法开始我们的排序之旅。 冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:转载 2015-07-18 18:51:49 · 1145 阅读 · 0 评论 -
《大话数据结构》第9章 排序 9.10 总结回顾
9.10 总结回顾 本章内容只是在讲排序,我们需要对已经提到的各个排序算法进行对比来总结回顾。 首先我们讲了排序的定义,并提到了排序的稳定性,排序稳定对于某些特殊需求来说是至关重要的,因此在排序算法中,我们需要关注此算法的稳定性如何。 我们将排序记录是否全部被放置在内存中,将排序分为内排序与外排序,外排序需要在内外存之间多次交换数据才能转载 2015-07-18 19:17:55 · 1233 阅读 · 0 评论