2012年5月3日

快速排序

摘要: 快速排序是一种十分优雅和十分实际有效的算法。快速排序和归并排序一样,也是一种用递归的算法。归并排序的基本递归操作是合并两个已经排好序的数组,而快速排序的基本递归操作是Partition,当然这个也是快速排序算法的核心,输入一个未排序的数组,选择其中一个元素,如何将它插入到数组中的某个位置,使得这个位置之前的所有元素都小于这个插入的元素,这个位置之后的元素都大于这个待插入的元素,简单来说,把待插入的元素放在排好序之后期望的正确位置上。快速排序算法的划分,也就是Partition使用了交换和一个优雅的扫描模型:使用两个游标i,jA[0...i]表示小于x的元素,[i+1...j-1]表示大于x的元 阅读全文

posted @ 2012-05-03 10:49 涅槃火凤 阅读(195) 评论(0) 推荐(0) 编辑

堆排序

摘要: 堆排序是基于堆这样一种数据结构的排序算法。下面简单介绍一下堆,在数据结构的范畴里,堆是一种完全二叉树的数据结构,满足任何一个父节点都大于其子节点(大根堆)或者任何一个父节点都小于其子节点(小根堆),所以堆有两个要素:1.堆是一颗完全二叉树,2.其父子的大小关系。逻辑上的概念比较简单,即以上的两个要素,那么在实际存储堆的时候会有一些小技巧的出现,其实在逻辑概念转化为实际的存储表示时总是存在这样的转化技巧。堆可以用一个抛弃0位不用的数组来表示,这种表示基于完全二叉树的一些性质:1. parent(i) = i/2 2.left(i) = i*23.right(i) = i*2 + 1以上的三个性质 阅读全文

posted @ 2012-05-03 10:33 涅槃火凤 阅读(166) 评论(0) 推荐(0) 编辑

归并排序

摘要: 本文针对的读者:了解递归,期望加深对归并排序的理解或者第一次接触归并排序归并排序,前一篇我们讲了插入排序,插入排序之所以叫做插入排序,是因为其复杂度最高的地方在插入的部分,为什么复杂度高?前面一篇已经比较详细的阐述了,因为插入出想的情况有三种,而人脑将三种情况统一在一块代码上,就显得有点困难了。如果是统一在一个概念之下会比较简单。那么这里的归并排序,所谓“归并”,“归”是递归,也就是说这个算法是一个递归的算法,大部分递归的算法都相对来说有容易想的优点,“并”是该算法的核心,也就是说复杂度就在这里了,如何将两个已排好的序列合并成一个排好的序列?这个比较简单,但是在实际编程的时候需要一个小技巧。下 阅读全文

posted @ 2012-05-03 10:01 涅槃火凤 阅读(248) 评论(0) 推荐(0) 编辑

插入排序

摘要: 本文针对的读者: 熟悉C++语法,期望进一步加深对插入排序的理解或者第一次接触插入排序的同学插入排序的思路和平时人们在打扑克牌时整理手中的牌的思路是完全一致的。 下面举一个实际的例子:在C++中,假设有一个int型的数组中存了未排序的一组数,如何采用插入排序的方法进行排序?仔细的回想一下整理扑克牌时的过程,刚开始手中没有牌,然后从牌堆拿一张牌,这时候手里有一张牌,当然此时手里的牌是有序的,继续从牌堆里拿牌,然后插入到手中的适当的位置,使手中的牌有序,接着继续从牌堆拿牌,并且插入手中,当牌堆中的牌拿完了之后,手中的牌也是排好序的,这样就完成了插入排序。从上面描述的过程中可以看出,这里有一个一直在 阅读全文

posted @ 2012-05-03 09:25 涅槃火凤 阅读(202) 评论(0) 推荐(0) 编辑

2012年4月24日

poj1001解题报告

摘要: 这一道题在poj上的AC ratio很低,客观上是因为这道题的细节较多,特别是在输出格式上的细节。在discuss中,我看到有一些人贴出代码,这个做法我不赞同,不管怎么 样,如果只是不加深入研究的复制粘贴AC,那也没有任何意义。给出一些测试数据帮助思考,我还是比较赞同的。 算法是一个半数学半工程的学科,所以它首先是严谨的,另外它又有别于数学更加贴近实际的问题。算法解决问题,不单纯依赖数学,生活实际中的问题有一些更注重策略和解决方案,而非数学。 希望以上的代码和叙述能给后来者一些有用的提示,切忌直接拷贝代码哦,如果能帮到你,我会很惊喜。#include <cstdio>#includ 阅读全文

posted @ 2012-04-24 19:00 涅槃火凤 阅读(476) 评论(0) 推荐(0) 编辑

Tkinter入门

摘要: 参考,翻译,转述 自:http://www.pythonware.com/library/tkinter/introduction/index.htmTkinter是一种python的编程接口,基于tk库,而tk是一组GUI toolkits,解决了跨平台UI显示。 简单说,也就是我们可以使用Tkinter和Python来编写图形应用程序员。使用Tkinter十分的简单,只要在Python中导入该模块就可以使用了。【Example 1】下面是最小化的hello world的一个示例: 1 # File: hello1.py 2 3 from Tkinter import * #导入模块 4 . 阅读全文

posted @ 2012-04-24 14:02 涅槃火凤 阅读(5214) 评论(0) 推荐(0) 编辑

Fedora15下配置Tkinter开发环境

摘要: 目的:使用Python开发UI程序尝试了使用PyQt, PyGTK, PyX11, 发现对于初学者来说,还是使用Python原生的Tkinter来的简单,因为其他方式安装起来相对来说比较复杂,对于初学者,我还是建议使用Tkinter.使用yum命令安装相关的软件包,尝试写了第一个Tkinter的hello world程序,发现报错:No package Tkinter available,于是yum install tkinter 这样,我的第一个hello world运行成功了!from Tkinter import * #导入Tkinter模块class Application(Fr... 阅读全文

posted @ 2012-04-24 13:46 涅槃火凤 阅读(425) 评论(0) 推荐(0) 编辑

导航