文章分类 -  C++/C技术

摘要:快速排序的主要思想就是:将待排序数组以某一个元素为阈值分为两个子列,一个子列包含所有比改阈值小的元素,另一个子列反之。这样只要将这两个子列排好序,整个数组也就排好序了。这里有一个关键的子过程就是划分的过程Partition,一般可以选择数组中任意的元素作为划分阈值,这里选择的是数组中最右端的元素。 Partition使用了二分查找类似的思想:使用两个索引器从数组的两端进行遍历,左边的索引器遇到比阈值大的元素停止,右边的索引器遇到比自己小的元素停止,然后交换这两个元素,依次循环。这样数组就划分为了比该阈值大和小(含等于)两个子列了。 阅读全文

posted @ 2005-07-17 11:09 k_eckel's mindview 阅读(559) 评论(2) 推荐(0)

摘要:堆排序的过程就是不断建堆的过程:1)初始化得到初始堆;2)将堆顶元素和堆中最后元素交换,在构建堆。注意到这个交换过程除堆顶元素破坏堆,并不会影响堆(原因:堆顶元素或是最大,或是最小)。 因此堆排序有关键是两个建堆函数:自底向上堆化和自顶向下堆化,分别对应代码中FixUp()和FixDown()。需要注意的是:为了方便堆的操作,我们一般将N+1个元素的数组的第一个元素不用,使用1到N的元素... 阅读全文

posted @ 2005-07-17 10:57 k_eckel's mindview 阅读(913) 评论(0) 推荐(0)

摘要:冒泡排序和选择排序是排序算法中比较简单和容易实现的算法。冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。两者的实现源码为: 阅读全文

posted @ 2005-07-17 10:50 k_eckel's mindview 阅读(1333) 评论(1) 推荐(0)

摘要:插入排序的思想很简单:假设前N-1个数据已经排好序了,第N个数据插到前面已经排好序的数组中。这和生活中一件事情有着异曲同工之妙:玩扑克牌的时候,很多人(包括我)都会按照花色从大小(或反之)进行排序,而每次再拿到新的牌,则插入到合适的位置,其实这就是插入排序的思想。 因此插入排序的过程可以分为两个步骤:1)找到新元素的插入位置;2)将将元素插入到1)中确定的位置,这就需要移动元素了。1)中确定位置我们可以采用简单的顺序遍历的方法得到,但是注意到由于前N-1个元素已经排好序,因此可以使用二分查找的方式实现。前者就是普通的插入排序,而后者就是二分插入排序。 阅读全文

posted @ 2005-07-17 10:29 k_eckel's mindview 阅读(439) 评论(0) 推荐(0)

摘要:计算机的最重要的功能就是用来处理信息的,而涉及到对信息的处理,查找和排序则是其中最为重要的条目。这也难怪一代算法宗师Knuth在其7卷(拟)的巨著《The Art of Programming》中整整第三卷就是查找与排序了。 这里尽量以较为正规的代码风格的代码将这些经典的排序和查找算法描述出来,目的无他,温故而知新。 u 几个要用到的函数 1) 随机产生测试... 阅读全文

posted @ 2005-07-16 17:11 k_eckel's mindview 阅读(506) 评论(0) 推荐(0)

摘要:Monostate模式——兼谈Singleton模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:28 k_eckel's mindview 阅读(1208) 评论(1) 推荐(0)

摘要:近读程序员第六期,有读者致信,言及模式必须有场景,空谈无用。其言词之激烈,语态之急切,实不为讨论、商榷姿态。然立论虽似有理,实需商榷,识之。模式范畴太大,这里就笔者熟悉的设计模式做一讨论,供参考。 阅读全文

posted @ 2005-07-08 21:26 k_eckel's mindview 阅读(509) 评论(0) 推荐(0)

摘要:因为如果没有梦想,就不会有激情,如果没有激情,就难以体味淋漓畅快的人生。 阅读全文

posted @ 2005-07-08 21:24 k_eckel's mindview 阅读(1010) 评论(0) 推荐(0)

摘要:设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去进行你的设计和开发,这一切才是最重要的。 阅读全文

posted @ 2005-07-08 21:20 k_eckel's mindview 阅读(507) 评论(0) 推荐(0)

摘要:设计模式解析之——Interpreter模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:18 k_eckel's mindview 阅读(988) 评论(0) 推荐(0)

摘要:设计模式解析之——Prototype模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:17 k_eckel's mindview 阅读(687) 评论(0) 推荐(0)

摘要:设计模式解析之——Iterator模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:16 k_eckel's mindview 阅读(731) 评论(0) 推荐(0)

摘要:设计模式解析之——Builder模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:14 k_eckel's mindview 阅读(838) 评论(0) 推荐(1)

摘要:设计模式解析之——Command模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:13 k_eckel's mindview 阅读(1186) 评论(0) 推荐(1)

摘要:设计模式解析之——Chain of Responsibility模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:12 k_eckel's mindview 阅读(650) 评论(0) 推荐(0)

摘要:设计模式解析之——Mediator模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:10 k_eckel's mindview 阅读(701) 评论(1) 推荐(0)

摘要:设计模式解析之——Adapter模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:09 k_eckel's mindview 阅读(889) 评论(0) 推荐(0)

摘要:设计模式解析之——Singleton模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:07 k_eckel's mindview 阅读(489) 评论(0) 推荐(0)

摘要:设计模式解析之——Decorator模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:05 k_eckel's mindview 阅读(969) 评论(0) 推荐(0)

摘要:设计模式解析之——Composite模式(k_eckel转自微软高校博客K_eckel's mindview)。 阅读全文

posted @ 2005-07-08 21:03 k_eckel's mindview 阅读(664) 评论(0) 推荐(0)