共 7 页: 上一页 1 2 3 4 5 6 下一页 末页

2011年4月25日

《大话数据结构》第9章 排序 9.8 归并排序(上)

摘要:9.8.1归并排序介绍 前面我们讲了堆排序,因为它用到了完全二叉树,充分利用了完全二叉树的深度是⌊log2n⌋+1的特性,所以效率比较高。不过堆结构的设计本身是比较复杂的,老实说,能想出这样的结构就挺不容易,有没有更直接简单的办法利用完全二叉树来排序呢?当然是有。 先来举一个例子。你们知道高考一本、二本、专科分数线是如何划分出来的吗? 简单地说,如果各高校本科专业在某省高三理科学生中计划招收1万名,那么将全省参加高考的理科学生分数倒排序,第1万名的总分数就是当年本科生的分数线(现实可能会比这复杂,这里简化之)。也就是说,即使你是你们班级第一、甚至年级第一名,如果你没有上分数线,则说明你的成绩排 阅读全文

posted @ 2011-04-25 09:42 伍迷 阅读 (5833) 评论 (7) 编辑

2011年4月22日

《大话数据结构》第9章 排序 9.7 堆排序(下)

摘要:9.7.2堆排序算法 堆排序(Heap Sort)就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素中的次小值。如此反复执行,便能得到一个有序序列了。 例如图9-7-4,左图是一个大顶堆,90为最大值,将90与20(末尾元素)互换,如中图所示,此时90就成了整个堆序列的最后一个元素,将20经过调整,使得除90以外的结点继续满足大顶堆定义(所有结点都大于等于其子孩子),见右图。然后再 阅读全文

posted @ 2011-04-22 08:17 伍迷 阅读 (8347) 评论 (12) 编辑

2011年4月21日

《大话数据结构》第9章 排序 9.7 堆排序(上)

摘要:9.7.1堆结构介绍 我们前面讲到简单选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n-1次。本来这也可以理解,查找第一个数据需要比较这么多次正常的,否则如何知道它是最小的记录。 可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较中,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。如果可以做到每次在选择到最小的记录的同时,并根据比较对其他记录做出相应的调整,那样排序的总体效率就会非常高了。而堆排序(Heap Sort),就是对简单选择排序进行的一种改进,这种改进的效果是非常明显的 阅读全文

posted @ 2011-04-21 21:56 伍迷 阅读 (6889) 评论 (6) 编辑

2011年4月20日

《大话数据结构》第9章 排序 9.6 希尔排序(下)

摘要:9.6.3希尔排序算法 好了,为了能够真正弄明白希尔排序的算法,我们还是老办法——模拟计算机在执行算法时的步骤还研究算法到底是如何进行排序的。 希尔排序算法代码如下。1voidShellSort(SqList*L)2{3inti,j;4intincrement=L->length;5do6{7increment=increment/3+1;/*增量序列*/8for(i=increment+1;i<=L->length;i++)9{10if(L->r[i]<L->r[i-increment])/*需将L->r[i]插入有序增量子表*/11{12L-> 阅读全文

posted @ 2011-04-20 20:52 伍迷 阅读 (7204) 评论 (4) 编辑

2011年4月19日

《大话数据结构》第9章 排序 9.6 希尔排序(上)

摘要:9.6.1变不可能为可能 给大家出一道智力题。请问“VII”是什么? 嗯,很好,它是罗马数字的7。现在我们要给它加上一笔,让它变成8(VIII),应该是非常简单,只需要在右侧加一竖线即可。 现在我请大家试着对罗马数字9,也就是“IX”增加一笔,把它变成6,应该怎么做? (几分钟后) 我已经听不少声音说,“这怎么可能!” 可为什么一定要用常规方法呢? 我这里有三种另类的方法可以实现它。 方法一:观察发现“X”其实可以看作是一个正放一个倒置两个“V”。因此我们,给“IX”中间加一条水平线,上下颠倒,然后遮住下面部分,也就是说,我们所谓的加上一笔就是遮住一部分,于是就得到“VI”。 方法二:在“IX 阅读全文

posted @ 2011-04-19 22:22 伍迷 阅读 (16489) 评论 (14) 编辑

《大话数据结构》第9章 排序 9.5 直接插入排序

摘要:9.5.1直接插入排序算法 扑克牌是我们几乎每个人都可能从事过的游戏。而最基本的扑克玩法都是一边摸牌,一边理牌。假如我们拿到了这样一手牌,如图9-5-1。啊,似乎是同花顺呀,别急,我们得理一理顺序才知道是否是真的同花顺。请问,如果是你,应该如何理牌呢? 应该说,哪怕你是第一次玩扑克牌,只要认识这些数字,理牌的方法都是不用教的。将3和4移动到5的左侧,再将2移动到最左侧,顺序就算是理好了。这里,我们的理牌方法,就是直接插入排序法。 直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 顾名思义,从名 阅读全文

posted @ 2011-04-19 09:54 伍迷 阅读 (8033) 评论 (15) 编辑

2011年4月18日

《大话数据结构》第9章 排序 9.4 简单选择排序

摘要:9.4.1简单选择排序算法 爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少。还有一种做股票的人,他们很少出手,只是在不断的观察和判断,等到时机一到,果断买进或卖出。他们因为冷静和沉着,以及交易的次数少,而最终收益颇丰。 冒泡排序的思想就是不断的在交换,通过交换完成最终的排序,这和做股票短线频繁操作的人是类似的。我们可不可以像只有在时机非常明确到来时才出手的股票高手一样,也就是在排序时找到合适的关键字再做交换,并且只移动一次就完成相应关键字的排序定位工作呢?这就是选择排序法的初步思想。 选择排序的基 阅读全文

posted @ 2011-04-18 10:01 伍迷 阅读 (6373) 评论 (7) 编辑

2011年4月15日

《大话数据结构》第9章 排序 9.3 冒泡排序(下)

摘要:9.3.2冒泡排序算法 我们来看看正宗的冒泡算法,有没有什么改进的地方。/*对顺序表L作冒泡排序*/voidBubbleSort(SqList*L){inti,j;for(i=1;i<L->length;i++){for(j=L->length-1;j>=i;j--)/*注意j是从后往前循环*/{if(L->r[j]>L->r[j+1])/*若前者大于后者(注意这里与上一算法差异)*/{swap(L,j,j+1);/*交换L->r[j]与L->r[j+1]的值*/}}}} 依然假设我们待排序的关键字序列是{9,1,5,8,3,7,4,6,2 阅读全文

posted @ 2011-04-15 11:41 伍迷 阅读 (3960) 评论 (8) 编辑

《大话数据结构》第9章 排序 9.3 冒泡排序(上)

摘要:9.3.1最简单排序实现 无论你学习哪种编程语言,在学到循环和数组时,通常都会介绍一种排序算法来作为例子,而这个算法一般就是冒泡排序。并不是它的名称很好听,而是说这个算法的思路最简单,最容易理解。因此,哪怕大家可能都已经学过冒泡排序了,我们还是从这个算法开始我们的排序之旅。 冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡的实现在细节上可以很多种变化,我们将分别就3种不同的冒泡实现代码,来讲解冒泡排序的思想。这里,我们就先来看看比较容易理解的一段。/*对顺序表L作交换排序(冒泡排序初级版)*/voidBubb 阅读全文

posted @ 2011-04-15 08:42 伍迷 阅读 (2948) 评论 (4) 编辑

2011年4月14日

《大话数据结构》第9章 排序 9.2 排序的基本概念与分类

摘要:9.2排序的基本概念与分类9.2.1排序的定义 排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录取时,会按成绩总分降序依次录取等。那排序的严格定义是什么呢? 假设含有n个记录的序列为{r1,r2,……,rn},其相应的关键字分别为{k1,k2,……,kn},需确定1,2,……,n的一种排列p1,p2,……,pn,使其相应的关键字满足kp1≤kp2≤……≤kpn(非递减或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,……,rpn},这样的操作就称为排序。 注意我们在排序问题中,通常将数据元素称为记录。显然 阅读全文

posted @ 2011-04-14 15:16 伍迷 阅读 (2593) 评论 (4) 编辑

《大话数据结构》第9章 排序 9.1 开场白

摘要:9.1开场白大家好!你们有没有在网上买过东西啊? 嗯?居然还有人说没有。呵呵,在座的都是大学生,应该很多同学都有过网购的经历。哪怕真的没有,也看到或听到过一些。现在网上购物已经相对成熟,对用户来说还是带来了很大的方便。假如我想买一台iphone4的手机,于是上了某电子商务网站去搜索。可搜索后发现(如图9-1-1),有8863个相关的物品,如此之多,这叫我如何选择。我其实是想买便宜一点的,但是又怕遇到骗子,想找信誉好的商家,如何做? 下面的有些购物达人给我出主意了,排序呀。对呀,排序就行了(如图9-1-2所示)。我完全可以根据自己的需要对搜索到的商品进行排序,比如按信用从高到低、再按价格从低到高 阅读全文

posted @ 2011-04-14 14:45 伍迷 阅读 (2154) 评论 (0) 编辑

2011年3月7日

《大话数据结构》第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->next; 解读这两句代码,也就是说让p的后继的后继结点改成p的后继结点。有点拗口呀,那我再打个形象的比方。本来是爸爸左牵着妈妈的手,右牵着宝宝的手在马路边散步。突然迎面走来一美女,爸爸一下子看呆了,此情景被妈妈逮个 阅读全文

posted @ 2011-03-07 10:29 伍迷 阅读 (3971) 评论 (13) 编辑

2011年3月5日

《大话数据结构》第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(n)是问题规模n的某个函数。 这样用大写O()来体现算法时间复杂度的记法,我们称之为大O记法。 一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。 显然,由此算法时间复杂度的定义可知,我们的三个求和算法的时间复杂度分别 阅读全文

posted @ 2011-03-05 16:13 伍迷 阅读 (6465) 评论 (17) 编辑

《大话数据结构》第2章 算法基础 2.8 函数的渐近增长

摘要:2.8 函数的渐近增长我们现在来判断一下,两个算法A和B哪个更好。假设两个算法的输入规模都是n,算法A要做2n + 3次操作,你可以理解为先有一个n次的循环,执行完成后,再有一个n次循环,最后有三次赋值或运算,共2n + 3次操作。算法B要做3n + 1次操作。你觉得它们谁更快呢? 准确说来,答案是不一定的(如表2-8-1所示)。 当n = 1时,算法A效率不如算法B(次数比算法B要多一次)。而当n = 2时,两者效率相同;当n > 2时,算法A就开始优于算法B了,随着n的增加,算法A要越来越好过算法B了(执行的次数比B要少)。于是我们可以得出结论,算法A总体上要好过算法B。 此时我们给 阅读全文

posted @ 2011-03-05 15:24 伍迷 阅读 (6225) 评论 (18) 编辑

2011年2月24日

《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?

摘要:1.2 你数据结构怎么学的? 早先我有一个学生叫蔡遥,绰号“小菜”。他前段时间一直通过E-mail与我交流,其中说起了他工作的一些经历,感慨万千。我在这里就讲讲小菜的故事。 他告诉我,在做我学生时,其实根本就没好好学数据结构,时常逃课,考试也是临时突击后勉强及格。毕业后,他几经求职,算是找到了一份程序员的工作。 工作中,有一次他们需要开发一个客服电话系统的项目,他们项目经理安排小菜完成客户排队模块的代码工作。 小菜觉得这个很容易,用数据库设计了一张客户排队表,并且用一个自动递增的整型数字作为客户的编号。只要来一个客户,就给这张表的末尾插入一条数据。等客服系统一有空闲,就从这张表中取出最小编号的 阅读全文

posted @ 2011-02-24 14:30 伍迷 阅读 (6791) 评论 (15) 编辑

《大话数据结构》第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. (如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。) 而我可能就是要折磨你们一辈子的那个人。大家好!我是《数据结构》这门课的老师,我叫封清扬。同学私下里都叫我“疯子”,嘿嘿,疯子可是有思想的标志哦。 在座的大家给我面子,都来选修我的课,这点我很高兴。不过在上课前,有些 阅读全文

posted @ 2011-02-24 14:27 伍迷 阅读 (6474) 评论 (21) 编辑

2011年2月8日

交互设计的学习体会分享

摘要:在博客园中的朋友,大多是技术工作者,于是更多地是关注技术的问题,而忽略了我们设计开发软件,特别是应用软件和互联网产品的目的是为了更好的服务普通用户。换句话说,我们都应该要补一补关于交互设计的知识,以便于我们在设计软件时,不要太过于以技术人为主导思维,犯一些看似很合理,但其实普通用户会觉得很不爽的事情。本文中的观点主要来自于交互名著《About Face 2》,并加入了很多自己的体会。希望可以对大家有所帮助。 阅读全文

posted @ 2011-02-08 23:40 伍迷 阅读 (7162) 评论 (43) 编辑

2011年2月6日

新浪微博产品交互改进之我见

摘要:本文主要是针对当前国内最热门的微博产品“新浪微博”提出一些个人使用后的改进建议,算是一种对“交互设计”研究的分享。 阅读全文

posted @ 2011-02-06 16:11 伍迷 阅读 (5659) 评论 (41) 编辑

2010年9月4日

伍迷七八月新浪微博集锦

摘要:新浪微博节选 阅读全文

posted @ 2010-09-04 08:50 伍迷 阅读 (1256) 评论 (4) 编辑

2010年7月28日

【转】怎样练习一万小时

摘要:好文必须分享,愿你有所感悟。 阅读全文

posted @ 2010-07-28 10:44 伍迷 阅读 (3056) 评论 (9) 编辑

共 7 页: 上一页 1 2 3 4 5 6 下一页 末页

导航