posts - 9,  comments - 9,  trackbacks - 0
一直以来,都在关注C++的语言,甚至语言的本身,但是后来觉得C++的确有很多诡异的事情,虽然有很多人解释的很好,解释的很合理,但是还是会有一种突兀的感觉,甚至觉得长时间的看下去,我最多知道如何用,如何更有效率地用C++,也许我的思维会更加富有商业开发价值,但是显然会更有局限性,更糟糕的是我会不会成为代码的奴隶?汗。。。基于前段时间的面试的经验,还是觉得算法是很重要的,而且一旦能够灵活使用,那种感觉一定更酷。所以决定还是好好学习算法,虽然以前大学的时候学过一点,但是现在真的好惭愧,以前都在做什么?自己也不知道了。但是男人,一定要做以后不会后悔的事情。相信凭借自己的聪明还是可以好好的学习到算法的精髓的。前进!两年以后希望能够直接转正微软。那时不希望看到遗憾。刚好手头有一本算法的书,自己实践了一番全排序【注:应该是全排列】的递归算法。以后不断更新,希望博客能伴随我的成长。

/*******************************************************************************
 *Prototype:   void Perm(int source[], int iFrom, int iLength)
 *Parameter:   iFrom: The index of first element, which is used to enumrate.
 *             iLength: The length of source.
 *Return:      N/A
 *Description: It uses recursive to enumerate all cases.   
 *****************************************************************************
*/

void Perm(int pSource[], int iFrom, int iLength)
{
    
// If error input, return.
    if (!pSource) {
        
return;
    }

    
    
if (iFrom >= iLength - 1{
        
// If all are ready, print them.
        for (int i = 0; i < iLength; ++i) {
            printf(
" %3d ", pSource[i]);
        }

        printf(
"\n");
    }
 else if (pSource && (iFrom >= 0&& iLength && (iFrom < iLength)) {
        
// If not ready, generate these recursively.
        
// Enumerate the first element before.
        Perm(pSource, iFrom + 1, iLength);
        
        
// Enumrate the others except the first.
        for (int i = iFrom + 1; i < iLength; ++i) {
            
// Swap the first to each others
            int iTemp = pSource[iFrom];
            pSource[iFrom] 
= pSource[i];
            pSource[i] 
= iTemp;
            
            
// Recursively
            Perm(pSource, iFrom + 1, iLength);
            
            
// Repaire
            pSource[i] = pSource[iFrom];
            pSource[iFrom] 
= iTemp;
        }
 // End for
    }
 // End if
}

附:
 C++的诡异:
1。const 类型的值。如果取得地址,再强行修改地址指向的内容,那么这个时候形成二义性。
2。你有没有见过 class A; A a = A();这样的声明方式?存在的道理?
3。虚函数是按照函数名来加入override机制的,而不考虑函数参数的。
4。如果一个基类的虚函数是public的,但是子类却覆盖了一个一样的虚函数实现,但是改成了private,这个时候又有什么样的二义性?
5。为什么要有 "->" 和 "." 这样的两种访问对象成员的符号?引用的存在是否又能否决你的答案?
6。C++标准为什么制定了很多feature以及function,却不制定implemention?导致了C++的灵活还是导致了缺乏平台迁移性的C++的死穴?

BTW,也许是自己对C++的语言还没有彻底觉悟,但是C++还是有太多的牛角尖可以钻的,可是这些都是无关紧要的了。当然我提的这一些也许可以算作是诡异,也许想来是想当然的yes or no的。所以我不是针对语言本身的,相反我还是喜欢C++的,毕竟因为对他的很多的迷惑让我在不断追求答案的同时得到很多。
posted on 2007-04-25 16:58 MicroYang 阅读(1488) 评论(6)  编辑 收藏 引用

FeedBack:
# re: 打算学习算法
2007-04-25 21:33 | alexandercer
很诡异的递归诶,看不懂。。。水平不够吧,可是既然是全排序,总要有比较吧?我怎么没发现?请赐教。
ps:实在是看不懂啊,所以忍不住发帖询问下。

alexandercer@gmail.com  回复  更多评论
  
# re: 打算学习算法
2007-04-25 21:40 | hulobet
全排列不是排序
比如 123 132 213 231 312 321
递归 你画一颗树会比较好理解  回复  更多评论
  
# re: 打算学习算法
2007-04-25 22:14 | alexandercer
我晕,原来是排列,懂了.
那么,MicroYang要改下说法了,原文可是:"自己实践了一番全排序的递归算法".
这个排序和排列可不一样啊,大哥~~~~~~~
  回复  更多评论
  
# re: 打算学习算法[未登录]
2007-04-26 11:28 | Sandy
呵呵,楼主在注释里面写得很清楚啊
"*Description: It uses recursive to enumerate all cases. ”  回复  更多评论
  
# re: 打算学习算法
2007-04-26 17:11 | Rome
permutation  回复  更多评论
  
# re: 打算学习算法
2007-04-29 13:00 | MicroYang
汗颜的很,细节的地方实在是没有注意。应该是全排列才对。实在抱歉的很!  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔档案

Friend

  • Catherine
  • 深海羚羊
  • 似雨打芭蕉,似风吹梧桐叶,带着一丝冰冷,也带着一丝清新------冰柔语丝

搜索

  •  

最新评论

阅读排行榜

评论排行榜