摘要: 主要分为两个子算法,PARTITION(A, p, r)以A[r]为基准对数组进行一个划分,比A[r]小的放在左边,比A[r]大的放在右边。QUICKSORT(A, p, r)是快速排序的子程序,调用划分程序对数组进行划分,然后递归地调用QUICKSORT(A, p, r),以完成快速排序的过程。快速排序的最差时间复杂度为O(n2),平时时间复杂度为O(nlgn)。最差时间复杂度的情况为数组基本有序的时候,平均时间复杂度为数组的数值分布较为平均的时候。在平时情况下快速排序跟堆排序的时间复杂度都为O(nlgn),但是快速排序的常数项较小,所以要优于堆排序。PARTITION(A, p, r).. 阅读全文
posted @ 2012-06-05 18:27 Mingxx 阅读(2711) 评论(0) 推荐(1) 编辑
摘要: umdh用法很简单:gflags -i application_name +ustumdh.exe -pn:application_name.exe -f:FirstDump.txt... exercise the applicationumdh.exe -pn:application_name.exe -f:SecondDump.txtumdh.exe FirstDump.txt SecondDump.txt -f:Result.txtgflags -i application_name - ust 阅读全文
posted @ 2012-05-10 15:23 Mingxx 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 很多时候我们会限制程序只能开启一个,一般我们会用全局命名互斥量来实现这个任务。如果程序没有界面,这样做可以很好实现。但是如果程序有界面呢,用户在双点桌面的快捷方式时,程序不能开启,最多只能提示程序已开启。这样就算完事了。但对用户来说,还要在任务栏上找个半天(也许这时个任务栏已全部都排满了。所以这对用户是很大的不方便。 下面写的是我最近看到的一个方案,它在第二次启动时最就第一次打开的界面显示在最前面。用户操作很方便多// CAtlFileMapping<HWND> m_mapping; map里放的时程序开启后的主界面窗口句柄#define APP_OBJECT_NAME _T(“a 阅读全文
posted @ 2011-12-03 23:02 Mingxx 阅读(788) 评论(2) 推荐(0) 编辑
摘要: 用过c++朋友一定都忘记释放过动态分配的内存。内存释放是一个很头痛的问题,一不小心就会造成内存泄漏。比如说,一个函数中分配了内存,但这个函数还有很多出口(return),我们不得不在每个出口去释放内存。这是一个很费时费力的的工作。但如果用了智能指针,在函数结束时,会智能的释放内存。这节省了程序员的工作,也减少程序员犯错。 在mozilla开源项目里用到了智能指针nsAutoPtr和nsAuto... 阅读全文
posted @ 2011-09-17 23:40 Mingxx 阅读(565) 评论(0) 推荐(0) 编辑
摘要: set nocompatiblesource $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbehave mswinset diffexpr=MyDiff()function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b 阅读全文
posted @ 2011-07-20 19:12 Mingxx 阅读(501) 评论(0) 推荐(0) 编辑
摘要: 用C++写程序程序都几年了,自己学得也算得心应手。不过最近在看别人写的代码时,觉得自己对C++的不是很深入的了解,很多东西都已经忘了。最拿C++数组地址来说。#include <stdio.h>typedef struct{ int a; int b;}TESTSTRUCT;TESTSTRUCT g_TestStruct[5];int main(int argc, char *argv[]){ printf("sizeof(TESTSTRUCT) = 0x%x\n", sizeof(TESTSTRUCT)); printf("[g_TestStruct 阅读全文
posted @ 2011-07-03 12:52 Mingxx 阅读(1911) 评论(13) 推荐(0) 编辑
摘要: 在linux里内核通用列表中list_for_each经常被使用。但这里有一点值得注意,最近在自己项目里就碰到了。 list_for_each的定义如下: #define list_for_each(pos, head) \ for(pos = (head)->next; pos != (head); pos = pos->next) list_del的定义如下: void list_del(s... 阅读全文
posted @ 2011-06-30 21:40 Mingxx 阅读(1376) 评论(0) 推荐(0) 编辑
摘要: 调不尽的内存泄露,用不完的Valgrind(一个介绍程序调试的精彩讲解:http://www.ibm.com/developerworks/cn/linux/l-pow-debug/) Valgrind 介绍 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语... 阅读全文
posted @ 2011-06-25 23:22 Mingxx 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 在多线程的程序里,往往很容易的使用TerminateThread函数。这个函数的功能是结束一个工作的线程在MSDN中REMARKS是这样说的: TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode c... 阅读全文
posted @ 2011-06-25 01:10 Mingxx 阅读(1818) 评论(0) 推荐(0) 编辑
摘要: WM_SYSCOMMAND Notification -------------------------------------------------------------------------------- A window receives this message when the user chooses a command from the Window menu (formerl... 阅读全文
posted @ 2011-06-12 23:42 Mingxx 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 1. 下载Zend Debugger并解压后,选择适合的版本 2.在php.ini 文件下添加如下内容(etc/php5/apache2/php.ini) zend_extension=<full_path_to_ZenderDebugger.so> zend_debugger.allow_hosts=<host_ip_addresses> eg. zend_extension=/user/loc... 阅读全文
posted @ 2011-05-02 22:26 Mingxx 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 软件开发的断点调试是必不可少,这里介绍ubuntu10.04中eclipse工具中php的调试配置。 本打算配置ZendDebugger 进行调试,配置了老长时间没配置成功,在phpinfo看不到ZendDebugger生效,经查发现是php5.3的问题,必须先卸载,本文介绍使用xdebug了。 软件安装太简单了,分别执行如下命令: sudo apt-get install apache2 sud... 阅读全文
posted @ 2011-04-30 08:11 Mingxx 阅读(925) 评论(0) 推荐(0) 编辑
摘要: !include <win32.mak> all = hello.exe objs = hello.obj .c.obj: $(cc) $(cflags) $(cvars) $*.c hello.exe:$(objs) $(link) $(guiflags) –out:hello.exe $(guilibs) $(objs) 阅读全文
posted @ 2011-04-22 20:46 Mingxx 阅读(175) 评论(0) 推荐(0) 编辑
摘要: >>>import chardet >>>chardet.detect(“e:\\a.txt”) {‘encoding’: ‘gb2312’, confidence:0.99} 阅读全文
posted @ 2011-04-01 00:57 Mingxx 阅读(869) 评论(1) 推荐(0) 编辑
摘要: 1. import os,sys r = raw_input(“type a directory name”) for root, dirs, files in os.walk(r): for f in files: print root, os.sep, f; 2. import os,sys def walkdir(dirname): try: ls = os.listdir(dirname)... 阅读全文
posted @ 2011-04-01 00:54 Mingxx 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 在MFC,ATL的源代码中充斥着__declspec(selectany) 的声明。selectany可以让我们在.h文件中初始化一个全局变量而不是只能放在.cpp中。比如有一个类,其中有一个静态变量,那么我们可以在.h中通过类似 " __declspec(selectany) type class::variable = value; "这样的代码来初始化这个全局变量。既是该.h被多次include,链接器也会为我们剔除多重定义的错误。对于teamplate的编程会有很多便利。 阅读全文
posted @ 2011-03-07 17:11 Mingxx 阅读(553) 评论(0) 推荐(0) 编辑
摘要: 程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。声明函数指针 回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的... 阅读全文
posted @ 2011-03-01 22:01 Mingxx 阅读(445) 评论(0) 推荐(0) 编辑
摘要: C语言中排序的算法有很多种,系统也提供了一个函数qsort()可以实现快速排序。原型如下: 显示代码打印1void qsort(void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));它根据comp所指向的函数所提供的顺序对base所指向的数组进行排序,nmem为参加排序的元素个数,size为每个元素所占的字节数。例如要对元素进行升序排列,则定义comp所指向的函数为:如果其第一个参数比第二个参数小,则返回一个小于0的值,反之则返回一个大于0的值,如果相等,则返回0。 例: 显示代码打印01# 阅读全文
posted @ 2011-03-01 20:50 Mingxx 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#Pragma message(“消息文本 阅读全文
posted @ 2011-03-01 15:17 Mingxx 阅读(1035) 评论(0) 推荐(0) 编辑
摘要: 1. GDI+初始化 Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PRT gdiplusToke; Gdiplus::GdiplusStartup(&gdiplusStartupInput, &gdiplusToken, NULL); 2. 打开图片 Gdiplus::Image image(“filepath”); if(ima... 阅读全文
posted @ 2011-02-25 19:14 Mingxx 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 1. 将窗口设置为顶层窗口 ::SetWindowPos(m_hWnd, HWND_TOPMOST,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE);2.取消窗口顶层 ::SetWindowPos(m_hWnd, HWND_NOTOPMOST,0,0,0,0, SWP_NOSIZE | SWP_NOMOVE); 阅读全文
posted @ 2011-02-23 10:47 Mingxx 阅读(420) 评论(0) 推荐(1) 编辑
摘要: Tenjin a fast and full-featured template engine based on embedded Python.install: sudo easy_install Tenjin example:## views/example.pyhtml <?py #@ARGS title, items ?> <h2>${title}</h2> <table> <?py cycle = new_cycle('odd', 'even') ?> <?py for item in 阅读全文
posted @ 2011-02-22 15:33 Mingxx 阅读(670) 评论(0) 推荐(0) 编辑
摘要: 用来防止用户程序直接访问内核中关键性数据结构和硬件设备是驱动程序的主要目的之一,所以,一个设计精良的驱动通常应该隐藏了硬件的复杂性和多变性。例如,一个程序写数据到磁盘时,只需要打开一个文件并执行写命令即可,而不必了解磁盘中的每个扇区的大小是512字节或者是1024字节,细节性的问题则交由驱动程序处理。此外,驱动程序还可以隐藏硬件的多变性(可能来自于不同厂家,甚至同一厂家不同型号)并给用户提供一个统一的访问接口。这也是Unix/Linux信条之一“一切皆文件”的赖以存在的基础。 1、可加载模块(loadable module) Linux采取了“宏内核&rdq 阅读全文
posted @ 2011-02-22 08:41 Mingxx 阅读(2023) 评论(0) 推荐(0) 编辑
摘要: 1. 准备编译环境和依赖 sudo apt-get build-dep firefox sudo apt-get install libasound2-dev libcurl4-openssl-dev libxt-dev libiw-dev mesa-common-dev autoconf2.13 2.准备配置文件,在源代码根目录下 # mozilla firefox config mk_a... 阅读全文
posted @ 2011-02-18 00:46 Mingxx 阅读(767) 评论(0) 推荐(0) 编辑
摘要: 1.类型判断 lst = [1,2,3] type(lst) if isinstance(lst, list) print ‘lst is list’ 阅读全文
posted @ 2011-02-17 20:56 Mingxx 阅读(317) 评论(2) 推荐(0) 编辑
摘要: 在界面程序中,经常会遇到接收到过多的WM_PAINT消息,导致程序一直在重画界面,系统CPU占用相当高。这种情况我已经碰到过好几次。 当WINDOWS启动一个界面程序或者FOCUS窗口,系统会发送WM_PAINT消息,重画界面。其它还有鼠标点击时也可能会发送这个消息。如果你的界面程序占用CPU很多资源,检查OnPaint函数无成重画时,有没有将使用ValidateRect或者ValidateRg... 阅读全文
posted @ 2011-02-11 20:03 Mingxx 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 1.gcc配置 apt-get install build-essential 2.ncurses未安装 apt-get install libncurses5-dev 阅读全文
posted @ 2011-02-11 19:49 Mingxx 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 1.安装程序$sudo apt-get install git$sudo apt-get install git-core2.那通过命令更新版本库git clone git://git.kernel.org/pub/scm/git/git.git3.创建一个新版本库$mkdir gittutorch$cd gitturtorch$git init这样,一个空的版本库就创建好了,并在当前目录中创建一个叫 .git 的子目录。你可以用 ls -a 查看一下,并请注意其中的三项内容:一个叫 HEAD 的文件,我们现在来查看一下它的内容:$ cat .git/HEAD现在 HEAD 的内容应该是这样: 阅读全文
posted @ 2011-02-10 12:53 Mingxx 阅读(9915) 评论(0) 推荐(0) 编辑
摘要: 一、安装SSH服务程序 1.安装服务器程序 sudo apt-get install openssh-server 2.确认程序是否启动 ps –e | grep ssh 3.如果只有ssh-agent 那ssh-server还没有开户,需要输入 /etc/init.d/ssh start 4.定义SSH服务端口/etc/ssh/sshd_config,(默认端口为22,可以不修改)然后重启... 阅读全文
posted @ 2011-02-10 10:09 Mingxx 阅读(502) 评论(0) 推荐(0) 编辑