先回答几个评论中的一个问题和我对无损编码部分的一个评论的看法。第一本是推荐的算法书。首先,我不是高手,也不是大牛,用不起“推荐”二字。我遇到过很多人,我想很多人都会对这个问题说《算法导论》,但我不这么认为,我一直认为人是不一样的,《算法导论》绝对是一本经典的书,但是学习的目的知识是学习和理解。能力更强,不是看的经典书多,而是懂的多。所以如果我推荐的话,我觉得分三种情况。第一个是你的数学基础很深,高中就喜欢做数学题。我觉得你可以试试看《算法导论》甚至是传说中的《计算机程序设计艺术》,二是高中时对数学不是很感兴趣,大学时喜欢编程但数学看多了头晕的人。其实我特别觉得《算法概论》和《算法设计与分析基础》好。除了这两本书之外,我觉得看一些《离散数学》真的对培养算法的基本思维方式很有帮助。第三个对数学的理解不是那么强。我觉得你还不如看一些像《离散数学》这样不那么抽象的书籍,培养兴趣,有了兴趣,以后只是时间问题。二是无损编码的朋友说这是“时间换空间”。从编程的角度来说,确实是时间换空间,但是这些一般都是在实际应用的上下文中。比如我所谓的研究方向是“Reversiblewatermarking”,这个东西必须要靠无损编码做预处理,所以这个观点是对的,但不是最要考虑的,因为这个有应用背景.好了,开始说本期的内容吧。与许多数据结构不同,让我们从列表和堆栈开始。我先从几个与数据结构结合不是很强的排序算法入手,因为我觉得在学这个系列之前算法的效率很重要。建立意识是必要的。2、从“屌丝”的几种排序算法入手,先介绍几种时间效率为O(N*N)的简单排序算法。这些排序算法虽然比较初级,但是任何高级的东西都是从初级的东西演化而来的。推断你小学不学123是不可能学高等数学微积分的。那么这些算法虽然是“屌丝”,但没有这些“屌丝”怎么可能“高帅富”呢?可以证明,通过交换排序算法的效率最快也只能达到O(N*logN)。除了以上,我还想强调一些书上提到的排序算法是否稳定的概念。所谓顺序是指待??排序序列中的等值经过排序算法后是否会交换位置,比如一组数据(2,0,2),排序后自然是(0,2,2),如果排序算法是稳定的,那么(0,2,2)中第一个出现的2应该是(2,0,2)中的第一个2,也就是两者的相对位置待排序序列中的2s不会交换。稳定性的定义可以参考百度的http://baike.baidu.com/view/547325.htm?fromTaglist。这个看似不起眼的知识点,就是昨天微软校园招聘倒数第二题的考点。公司的题目真棒。选择排序是最符合人类自然思维的一种排序方法。它不断地寻找序列中的最小值,并将其放在当前最小的位置。简单、方便、快捷。不得不说是最“脏”的排序算法。没有什么特别的技巧,完全依赖两次循环,代码如下:voidSelectionSort(inta[],intlength){for(inti=0;i
