摘要: 实现全排列的另一种方法,就是实现递归。实现思路: 假如 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) 编辑