摘要:
今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。思想快速排序采用的思想是分治思想。快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。举例说明一下吧,这个可能不是太好理解。假设 阅读全文
摘要:
在前面的文章中,已经向大家介绍了插入排序和选择排序两种基本的排序方法。今天要介绍的是另外一种排序方法——冒泡排序。思想同之前介绍的两种排序方式一样,冒泡排序也是最简单最基本的排序方法之一。冒泡排序的思想很简单,就是以此比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。举例分析说明一下,如下数据:2 7 4 6 9 1 首先比较最后两个数字,发现1比9小,于是前移2 7 4 6 1 9 然后比较6和12 7 4 1 6 9 继续前移,然后是4和12 7 1 4 6 9 7和1比较2 1 7 4 6 9 2和11 2 7 4 6 9 至此,第一 阅读全文
摘要:
今天继续介绍排序算法系列的第二讲,选择排序。选择排序也是一种常见的排序方法,非常简单。废话不说,来看看吧。思想还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。代码 for(int i=0; i<v.size(); i++){ int min = v[i]; ... 阅读全文
摘要:
各种排序算法应有尽有,看看这里http://coolshell.cn/articles/3933.html,很牛吧。有了这个,还敢说自己学不好排序么,呵呵什么?不明白哪个快那个慢?那看看这里http://www.sorting-algorithms.com/一句话总结,高手都在民间。。。 阅读全文
摘要:
看到一些常用的shell技巧,分享一下。ctrl + u 删除光标所在位置到当前行最前面ctrl + k删除光标所在位置到当前行最后面ctrl + a 移动光标到当前行最前面ctrl + e移动光标到当前行最后面!! 重复执行上次的命令which 可执行文件的路径查找find [路径] [参数] [表达式] find /etc/ -name passwd 查找/etc下的passwd文件 find . -name '*.conf' -exec cp {} {}.orig \; 查找当前目录下所有.conf文件并将其复制,在文件名后缀加.orig。({}是查找的结果,\;代表终止 阅读全文
摘要:
好久没有写文章了,前一阵子身体不适。从今天开始,想把各种排序算法总结一下,基础才是最终要的,况且现在各种面试都会考到排序知识,希望我的文章能给大家带来一些帮助。这个排序系列没有主要次要之分,也不按难易顺序,完全随机。今天先说说插入排序。思想插入排序的思想有点像打扑克抓牌的时候,我们插入扑克牌的做法。想象一下,抓牌时,我们都是把抓到的牌按顺序放在手中。因此每抓一张新牌,我们都将其插入到已有的排好序的手牌当中,注意体会刚才的那句话。也就是说,插入排序的思想是,将新来的元素按顺序放入一个已有的有序序列当中。举个例子可能更容易理解一些,假设有这样一系列数字: 8 2 4 9 3 6 首先我们考虑数字. 阅读全文
摘要:
文本分类的定义 文本分类是现在非常热门的一个研究领域,也是机器学习中最为重要最为基础的组成部分。文本分类有各种各样的方法,有些简单易懂,有些看上去非常复杂。其实只要搞清楚他们背后的原理,理解文本分类并不是一件很困难的事情。今天先从宏观上介绍一下文本分类,后续会在其他博文中分门别类对文本分类这一课题进行深入的分析,敬请关注。也希望各位高手们多提建议,毕竟我也是菜鸟一个。 文本分类就是将一篇文章归入已有的几个类别当中,这里注重强调2点: 1 要分类的类别必须是事先确定的,并且短时间内不会发生改变。 2 分类的类别并不一定唯一。 文本分类的方法 1 人工制订规则 这种方法最大的弊端... 阅读全文
摘要:
前言:写这篇文章不是为了给别人指路,而是为了给自己探路。本人只是有幸在大公司和小公司都有过一段时间的工作经历,但是无权向别人建议是去大公司还是小公司。我想每个人对这个问题都有自己的理解和认识,在不同的阶段也有不同的想法。本文只是简单的客观的描述我在不同地方工作体会到的真实感触,不太任何感情色彩。希望通过我的经历,给大家一些启发,也希望过来人给我些建议,我对此也很迷茫。 06年开始读计算机本科,真正接触计算机行业,我很幸运,因为我很快的喜欢上了这个领域。其实也并非喜欢沉浸在技术海洋里,享受技术控的快乐。只是为了自己的成果被别人享用时的那一点点成就感和虚荣心,我想这对我来说,已经足够。正因为... 阅读全文
摘要:
之前写过两篇科普文章,使用gdb调试程序入门篇和中级篇,今天打算把最后的一部分写完,就是所谓的高级篇。其实很简单,也没有多复杂。只是个人认为gdb的使用,掌握到这个地方,对于常规的调试需求就已经足够了。至于更高级的应用,肯定是多多益善。但是学习工具的目的就在于提高工作效率,没有必要为了技术而技术,技术永远都只是一种工具。不知道这个观点是否会被技术迷所鄙视,呵呵。不多废话了,言归正传。 查看运行时数据 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: print <expr> pr. 阅读全文
摘要:
闲话少叙,经过上篇文章的铺垫后,咱们趁热打铁,继续学习。 设置断点 break <function>在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。 break <linenum>在指定行号停住。 break filename:linenum在源文件filename的linenum行处停住 break filename:function在源文件filename的function函数的入口处停住 break *address在程序运行的内存地址处停住 break if i=100 表示当i为10 阅读全文