摘要: 实现全排列的另一种方法,就是实现递归。实现思路: 假如 allsort(a b c);分治思想化为a+allsort(b c); b+allsort(a c), c+allsort(a b);递归一层后计算第二层时:如allsort(b c)时,化为b+allsort(c) 和 c+allsort(b);此时问题就明显了,首先确定一个元素,求剩下的全排列,如此类推下去做一个递归;实现代码: #include <stdio.h> #define N 4 int a[N]; void perm(int); void print(); void move(int, int); int m 阅读全文
posted @ 2012-12-15 21:11 helloyu 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 文章转自http://www.programmer.com.cn/9722/程序员在职业生涯中难免要接受编程面试。有些程序员由于平时没有养成良好的编程习惯,在面试时写出的代码质量不高,最终遗憾地与心仪的公司和职位失之交臂。因此,如何在面试时能写出高质量的代码,是很多程序员关心的问题。 代码的规范性面试官是根据应聘者写出的代码来决定是否录用一个应聘者的。应聘者首先要把代码写得规范,才可以避免很多低级错误。如果代码写得不够规范,会影响面试官阅读代码的兴致,至少印象分会打折扣。书写、布局和命名都决定着代码的规范性。规范的代码书写清晰。绝大部分面试都要求应聘者在白纸或者白板上书写。由于现代人已经习惯了 阅读全文
posted @ 2012-12-15 20:00 helloyu 阅读(670) 评论(0) 推荐(0) 编辑
摘要: 想到 前几天的一个问题,如何实现元素的全排列 并且按照升序输出。可以有两种方法:递归和非递归首先介绍非递归的方法:思路:以三个数字为例1,2,3升序的全排列为:1 2 31 3 22 1 32 3 13 1 23 2 1显然每个组合 都有一个直接后继,找到一个数没有后继如 3 2 1 则停止。问题来了 那就是如何找到后继和没有后继的数如何判断该数是否有后继。就是对于一个数,如何找到一个比它大的,且最小的数.还是1 2 3为例 ,假设 此时的排列为"1 3 2" ,那么32是非递增的,而13是递增的,满足要求,然后根据要求2是比1大的最小的数,此时交换两个数的位置得到2 3 阅读全文
posted @ 2012-12-15 19:17 helloyu 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 第二章:基本的算法(1) 下面就从编程珠玑的第二章算法讲起,首先请看问题描述:将一个n元一维向量向左旋转i个位置。例如:当n=8时且i=3时,向量abcdefgh旋转为defghabc。简单的代码可以使用一个n元的中间变量在n步内完成工作,下面介绍一些更简便的算法。1:杂技算法: 移动x[0]到临时变量t,然后移动x[i]到x[0],x[2i]到x[i],依次类推(将x中的所有下标对n取模),直到返回到取x[0]值的元素,此时改为从t取值然后终止过程,当i为3时n为12时,元素安如下顺序进行移动:(此代码用到了求最大公约数的算法) 1 #include<iostream> 2 3 阅读全文
posted @ 2012-12-14 21:50 helloyu 阅读(196) 评论(0) 推荐(0) 编辑