随笔分类 -  算法分析

摘要:递归的思想 以此类推是递归的基本思想。 具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。 递归的两个条件 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用) 存在一种简单情... 阅读全文
posted @ 2016-05-05 19:46 klguang 阅读(14459) 评论(5) 推荐(12) 编辑
摘要:基本思想:将若干有序序列逐步归并,最终归并成一个有序序列。 二路归并排序 基本思想:将序列分为若干有序序列(开始为单个记录),两个相邻有序的序列合并成一个有序的序列,重复进行,直到整个序列有序。 一次归并过程:两个有序序列a、b,目标数组c。每次往目标数组c中放一个记录,a、b序列谁小就放谁。直到一个数组全部放入目标数组,对另一个进行收尾工作。 归并的递归实现: 将数组拆分成单个记录的子序列(... 阅读全文
posted @ 2016-05-04 17:53 klguang 阅读(656) 评论(0) 推荐(0) 编辑
摘要:交互排序思想:在待排序的序列中选择两个记录,将他们的关键码进行比较。如果反序则交互它们的位置。 冒泡排序 基本思想:将序列分为有序区,无序区。每次从无序区冒泡一个最小的记录。 冒泡过程:从无序区从后往前扫描,两个相邻记录比较,如果后面比前面的小,则交互。 算法分析 冒泡排序-java实现 /** * 将序列分为两部分:有序区:无序区 * 每趟从无序区 冒泡一个最小的... 阅读全文
posted @ 2016-04-30 16:28 klguang 阅读(896) 评论(0) 推荐(0) 编辑
摘要:直接插入排序 将待排序序列分为有序区和无序区,将无序区的元素逐一插入到有序区合适的位置上,直到全部有序。 类似玩牌时整理排的过程。 直接插入排序步骤 1.以数组第一个元素为有序区。 2.将无序区的第一个元素关键码,插入到有序区。 寻找关键码在有序区的目标位置 插入关键码 重复步骤2,直至全部有序。 直接插入排序演示: 算法分析 直接插入排序-java实现 /** * 直接插入... 阅读全文
posted @ 2016-04-24 15:21 klguang 阅读(740) 评论(0) 推荐(0) 编辑
摘要:堆的定义 一个完全二叉树中,任意父结点总是大于或等于(小于或等于)任何一个子节点,则为大顶堆(小顶堆)。 堆的数组存储方式 完全二叉树适合采用顺序存储的方式,因此一个数组可以看成一个完全二叉树。 节点编号:树根起,自上层到下层,每层从左至右,给所有结点顺序编号,能得到一个反映整个二叉树结构的线性序列 阅读全文
posted @ 2016-04-22 21:47 klguang 阅读(17423) 评论(1) 推荐(2) 编辑