算法与数据结构入门
使用Java语言展现入门级的算法与数据结构
拜水:问道
诗酒趁年华
展开
-
【二分法求解】局部最小值问题
局部最小值问题 文章目录局部最小值问题一、 问题引入:二、 局部最小值的定义三、 求解思路分析四、 分治策略求解五、 特殊情况考虑六、 代码实现 一、 问题引入: 存在这样一个数组arr(元素相邻不相等),求这个数组的局部最小值 。 二、 局部最小值的定义 若一个数小于它左边的数并且小于它右边的数,那么这个数被称为局部最小值,即:arr[x-1] < arr[x] < arr[x+1]。 数组边界元素局部最小值定义为: 若arr[0] < arr[1],则arr[0]为局部最小值;若arr原创 2022-01-03 18:43:56 · 1076 阅读 · 0 评论 -
排序算法学习之直接插入排序
直接插入排序 排序算法思路: 在1~n-1范围维护一个下标end 将数组中下标为end的数与0~end-1的数进行比较 在2的基础上进行数据交换,从而实现升序(降序)排列 时间复杂度分析: 当带排序数组有序时为最优情况,最多需比较n-1次,交换0次;当带排序数组逆序时为最坏情况,最多需要比较n*(n-1)/2次,交换n*(n-1)/2次。 最好情况时间复杂度:O(n) 最坏情况时间复杂度:O(n^2) 稳定性分析: 一种稳定的排序算法 代码实现: public class Code04_InsertSo原创 2021-11-19 13:41:21 · 184 阅读 · 0 评论 -
排序算法学习之简单选择排序
简单选择排序 排序算法思路: 在 0~n-2 位置处,选择一个数 在 1~n-1 位置处选择一个最大(最小)的数 将2中得到的最大(最小)的数与1中选择的数进行交换,最终实现降序(升序)排列。 简单选择排序比较次数为n*(n-1)/2,而交换次数介于0~n-1之间。 时间复杂度分析: 交换操作的时间复杂度:O(n) 比较操作的时间复杂度:O(n^2) 稳定性分析: 一种不稳定的排序算法。 代码实现: public class Code02_SelectionSort { //选择排序 p原创 2021-11-18 20:37:32 · 466 阅读 · 0 评论