08 2013 档案

摘要:这几天一直都在看跟递归有关的内容,于是就顺便复习了一下同样具有递归的分治法思想的归并排序和快排。以前因为一直难以理解递归的思想,导致我理解起快排和归并排序非常的痛苦,所以产生了排斥的心理,现在认真学习了一番发现其实递归的思想并不难理解。归并排序的算法步骤1、将数组A[p, r]等分成两个子数组:A[p, q]和A[q+1, r],其中q = (p+r)/2。2、分别对两个子数组进行归并排序。3、合并两个已有序的子数组。核心步骤是第三步,归并排序就是在经过第三步后使得数组由无序变为有序的,所以我们首先要写出第三步的算法,用一个函数merge来实现。既然是要合并两个数组,那函数的参数就是两个有已有 阅读全文
posted @ 2013-08-29 17:37 StrikeW 阅读(391) 评论(0) 推荐(0)
摘要:冒泡排序是最简单的排序算法,因为很容易实现,并且也容易理解。基本思想就是每一趟迭代都把最大的元素移动到序列的最末尾(或者是把最小的元素移动到最前面),即数值大的元素像泡泡一样“冒”到了最后。最近看到一篇博客上说冒泡排序在最佳情况下(序列已经是有序的)的时间复杂度为O(n),比快排和归并排序的O(nlog(n))还要快。我对此感到非常怀疑,因为按照最普通没有任何优化的写法,我觉得冒泡排序无论待排的序列是什么情况,其复杂度(按比较次数来算)都是O(n^2),因为有两层嵌套的循环。下面是Java的实现代码:public static void bubbleSort(int[] a) { for (. 阅读全文
posted @ 2013-08-29 16:37 StrikeW 阅读(1435) 评论(0) 推荐(0)
摘要:题目1:实现一个函数,能够输出一个字符串中的所有字符的所有可能的组合,例如将字符串"dog"作为该函数的输入,那么输出将是"dog","dgo","odg","ogd","gdo","god"。如果字符串中有重复的字符,将它们看作是不同的字符,例如输入"xxx",那么输出将是6个"xxx"。解法1:可以想想我们在写"dog"的全排列时是怎么写的?首先固定第一个字母'd',然后再找出 阅读全文
posted @ 2013-08-25 00:08 StrikeW 阅读(760) 评论(0) 推荐(0)