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