
算法学习
文章平均质量分 81
linmiansheng
邮箱 :sheepjtgjfc163.com
展开
-
算法学习(二)快速排序(下)
里是将数组的最后一个元素作为基准数来比较,如图中a[8] = 10。2)同样的,也有两个指针i 跟 j,但 i 一开始的位置是起始位置 - 1,如上面应该是 0 - 1 = -1。为什么会是这样呢?3)j 会一直向右扫,每次扫都会比较当前数a[j] 是否比基准数小,如果是的话,则会把 i + 1位置的数跟a[j]的值互调。这里我们就要回答一下为什么是要拿 i + 1位置的数跟 j 相调,为什么一开始要i 设置成 low - 1呢,就是因为 i 当前位置的值a[i] 其实就是上一轮交换的数,它本来就是比基原创 2014-02-22 19:30:21 · 1658 阅读 · 0 评论 -
算法学习(二)快速排序(上)
1)首先要有两个指针,一个从最前面开始,一个从最后面开始。2)将数组中第一个元素拿出来,作为一个基准数来比较,比它大的,扔到后面,比它小的扔前面。而由于将它拿出来了,它原先所处的位置就空出来了,如图上的11。3)从数组后面开始往前扫描,拿值与基准数比较,如果比基准数小,则将它放到数组中空出来的位置,也就是 i 当前的位置了。如图中,第一个 j 的值就是10,比基准数11,则将它放到a[i],此时 i 的值是0,而a[i]是空出来的位置,那么 i 被放了,我们就要把 i 的指针往前移一位,而由于 j 的值原创 2014-02-21 23:47:30 · 2271 阅读 · 0 评论 -
动态规划(一)之背包问题
如果一个问题可以用动态规划来解决,那么这个问题需要满足两个条件:1)这个问题可以分解成很多子问题,并且这些子问题的最优解给合起来,就是大问题的最优解。2)这些很多的子问题有很多是重复的。下面是经典的背包问题。。。第一个是判断1)当前物品的重量是不是比这个背包重,如果比这个背包重,我们就直接pass,就是我们上面举例说的第三步了,背包重量只有1的时候,重量大于1的都不用考虑。第二个是判断:2)当物品的重量是可以放进背包的时候,就要考虑一下,放了这个物品之后,剩下的重量的最优解加上当前物品的价值原创 2014-02-11 00:52:58 · 1568 阅读 · 0 评论 -
算法学习(三)堆排序
要弄清楚堆排序,我们首先要懂得以下两点:1)逻辑上的结构,怎么样才是一个堆。2)存储上的结构,一个堆存储起来的结构是怎么样的。一般来讲,堆排序中的“堆”指的是二叉堆,一种完全二叉树的结构,每个父结点最多只有两个子结点,且满足两点:1)父结点总是大于(小于)其两个子结点(大于的,我们叫最大堆,小于的,我们叫最小堆)。2)父结点的左右子树也都满足上面1)的规则,也就是说其左右子树也是一个最大堆或者是最小堆。。。。1)从第一个非叶子结点开始,也即是7开始,我们比较它跟其左右子结点的值,将三者中最大的原创 2014-02-28 22:32:03 · 1589 阅读 · 0 评论 -
算法学习(四)冒泡排序
冒泡排序的原理是:1)从0开始,比较相邻两个元素的大小,如果是按从小到大排序的话,则将大的元素往后往,反之,则将小的元素往后放,这样经过一轮的比较,就会将最大或者最小的数放到数组的最后面了。2)第二轮开始,还是从0开始,但是这一次呢,就不需要比较最后面那个元素了,因为它已经是最大了(这其实跟堆排序,找出最大数或者最小数,放到数组后端是一样的道理),假设数组长度为N,则第二轮只需要比较N-1个元素了。3)这样,每一轮结束,都会有一个当前最大素放到最后面,那么到第N-1轮的时候,其实就只剩一个元素了,于是原创 2014-03-13 00:03:08 · 1429 阅读 · 0 评论