《编程珠玑》读书笔记
文章平均质量分 77
lachn
这个作者很懒,什么都没留下…
展开
-
专为手机号码设计的特殊的排序
打个比方说吧,某移动公司的数据库里存了移动用户的数据,有一项属性是用户的手机号码。现在要对这些号码进行排序,条件是,内存比较小,速度希望不要太慢。我们来分析一下吧,中国的手机号码是11位的。其实在这里各位看官也可以自己先想想具体怎么实现,注意,不要用冒泡、快速等等,要-----非主流。 书中用到的办法涉及到指针,因为我现在用c#更加顺手一点,所以我用数组的方式加以试验,意会即可:1>取一数组,含有10^11(10的十一次幂)个元素的bool型 a[n](02>初始值为false3>遍历手机号码。手机号码=n原创 2010-08-02 22:36:00 · 1291 阅读 · 0 评论 -
旋转向量方法的一些学习
最近也没闲着,上次学习了SuperSort之后,(书上好像叫做“位图方法”),顺便去复习了一下常规的排序算法,现在基本上都过了一遍,代码也差不多写完了,准备再整理整理过两天发上来,其实有这么写博客挺好的,写下来以后就不用在去自己的电脑里找了,而且写博客的过程也是对知识的一个提炼和复习,当然,还是那句话,本人菜鸟,欢迎拍砖,争取早日实现博客评论的零记录。好,言归正传:给定一个字符串诸如“abcdefg”,然后要求向左移动三位,即得到“defgabc”这样的结果,当然前提是不使用现成的方法,而且书中还要求是只能原创 2010-12-01 22:49:00 · 804 阅读 · 1 评论 -
在字典中查找变位词的方法
背景是给定一个单词,比如说least ,然后再给你一部英语字典,在里面找出拥有相同字母的单词(书中称为变位词),比如有这样一些,setal stale steal .etc...我实在是没有这么一部电子版的字典,所以干脆自己生成了一部字典(当然字典里的单词都是乱七八糟的),然后我把给定的单词也随机产生,定为是5包含五个字母的单词,字典中的所有单词也都是只有5位数,(我后来这么一算的话发现这个字典撑死只有26^5个单词≈25^5=(100/4)^5=100^5/4^5=10,000,000,000/102原创 2010-12-07 23:04:00 · 2062 阅读 · 0 评论 -
好好写一遍“用二分法在数列中搜寻一个数字”的代码
这个问题在《编程珠玑》的第四章中有讲到,据说作者在贝尔实验室里让一些人花了数小时来实现这个方法,但是最终只有10%的人的代码没有发现错误,因为总会有这样或者那样的疏漏。然后我也试着在自己的电脑上写了一遍,是在记事本中写的,没有用到IDE,没有提示,不能试运行。写完之后检查检查,改了改小错误,然后放到vs里,不出所料又报了几个错误,下面是我改完之后的代码: static void Main(string[] args) { List nList = new L原创 2010-12-10 20:37:00 · 743 阅读 · 0 评论 -
线性算法的让人惊叹的效率
<br />这是书中第八章讲到的一道很普通的题目。大致如下:<br />有个串整数数列,有正有负,要求寻找出该数列中和最大的一段<br />比如说:1,2,-3,-2,3,6,-1,-3,5,-2,那么应该是3,6,-1,-3,5这段,和为10<br />什么也不说了,上代码吧<br /> <br />具体的算法:<br />以下初始化的方法、考虑第一个数字和doubleAdd是我自己加上去的,其他书中好像都有<br />/// <summary>/// 普通算法/// </summary>//原创 2010-12-22 13:44:00 · 594 阅读 · 0 评论 -
专为手机号码设计的特殊的排序[我的代码]
以下是我自己尝试的排序代码,规模量在10000以内的排序,欢迎拍砖,还请多多指教使用的是C#代码 class Program { static void Main(string[] args) { StopWatch sw1 = new StopWatch(); StopWatch sw2 = new StopWatch(); DealSuperSort ss = new DealSuperSort()原创 2010-11-17 21:01:00 · 724 阅读 · 0 评论 -
插入排序、快速排序,你还记得吗?
算法往往是我们入门软件开发的一个基础,而排序,一般是算法中的基础。我一直觉得,自己的基础没有打好,自己学计算机也是半路出家,到现在还后悔上大学的时候没有疯狂的学习。闲话不说了,说说今天的主题。我试着让我写的东西可以浅显易懂,毕竟,我一直觉得,突然间看别人写的代码总是很别扭的问:你会写插入排序吗?答:我们至少曾经会的,现在很多人都已经忘记了,以下是我的代码int temp = 0;for (int i = 1; i 0 && listInt[j - 1] > temp; j--) {原创 2011-01-28 22:51:00 · 852 阅读 · 2 评论