
算法
maijia0754
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
三.快速排序
快速排序使用了分治法策略,把一个数组分成两个数组,对数组arr[p…r]进行快速排序的三步分治过程: 分解:数组被分成两个(可能为空)子数组arr[p…q-1]跟arr[q+1…r],其中arr[p…q-1]的所有元素都小于等于arr[q],arr[q+1…r]中的所有元素都大于arr[q],并计算出下标q的数值。 解决:通过递归调用快速排序,对子数组arr[p…q-1]跟arr[q+1原创 2017-09-06 16:15:11 · 366 阅读 · 0 评论 -
二.堆排序
堆排序在堆排序中,使用了堆的数据结构,结构如下图: 这个(二叉)堆是一个数组,可以看成一个近似的完全二叉树,树上的每一个节点对应数组的一个元素,除了最底层外,该树是完全的,而且从左到右填充,其高度为log2n。在一个堆中,它的父节点i对应的子节点分别为2i跟2i+1,二叉堆可以分成最大堆跟最小堆,在最大堆中,某个节点的值最多与其父节点一样大,而最小堆刚好与最大堆相反,这里使用最大堆进行排序。原创 2017-09-04 10:53:40 · 352 阅读 · 0 评论 -
一.归并排序
归并排序这几天在学算法,打算写成博客记下来加深一下印象,其中有什么理解的不对或者写错的地方请点出。 第一个是归并排序,该算法是分治法的典型应用,完全遵循分治模式,直观的操作如下: 1.分解:分解待排序的n个元素的序列成两个n/2的子序列。 2.解决:使用归并排序递归地排序两个子序列。 3.合并:合并两个已排序的子序列以产生已排序的最终序列。 当分解到序列的长度为1时原创 2017-09-01 11:42:51 · 360 阅读 · 0 评论 -
四.二分法查找
二分法查找二分法查找是从一个有序的数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间的元素就是需要查找的元素,则搜索过程结束,如果中间的元素比该元素小(或大),则从中间元素左边(或右边)的区间继续查找,跟开始一样与该区间的中间元素比较,一直重复此过程,直到找到该元素或者当搜索的区间的元素个数为1且不等于搜索的元素(此时搜索的元素不存在与数组中),结束查找。 Java代码:pu原创 2017-09-07 15:19:01 · 304 阅读 · 0 评论 -
五.BFPRT线性查找算法
BFPRT算法BFPRT解决的问题十分经典,即从n个元素的数组中选出第i大或前i大(第i小或前i小)的元素。该算法的思想与快速排序类似,使用划分算法,选择一个主元,把比主元小的放在主元前面,比主元大的放在主元后面,如果该主元就是要选择的第i小的元素(也就是该主元的下标与i相等),算法结束;如果该主元的下标比i大,则以划分出来的左数组重复此过程;如果该主元的下标比i小,则以划分出来的右数组重复此过程,原创 2017-09-12 16:57:27 · 2128 阅读 · 0 评论