
算法
文章平均质量分 52
千g
做最好的自己
展开
-
堆排序
堆排序是对直接选择排序的一种优化:直接选择排序,在n个键值中选出最小值,至少进行n-1次比较。然而继续在剩余的n-1个键值中选出次小值,要比较n-2次。怎样才能利用前面n-1次的比较所得的信息,来减少以后比较的次数,所以有了堆排序。堆排序:设有 n 个元素,欲将其按关键字排序。可以首先将这 n 个元素按关键字建成堆,将堆顶 元素输出,得到 n 个元素中关键字最大(或最小)的元素。然后,再将...原创 2017-09-24 10:37:36 · 537 阅读 · 38 评论 -
【算法】二分查找(折半查找)
二分查找条件:必须是有序的二分查找思路:1 确定该数组的中间下标 mid = (left + right)/22 让需要查找的数findVal 和 arr[mid] 比较 findVal > arr[mid],说明你要查找的数在mid的右边,因此需要递归的向右查找 findVal <arr[mid],说明你要查找的数在mid的左边,因此需要递归的向...原创 2019-09-01 19:32:26 · 510 阅读 · 0 评论 -
【算法】递归的应用
目录一、What2个重要条件:举例:二、How实例一、实例二、一、What递归算法是一种直接或间接调用自身函数或者方法的算法。实质是把问题分解成规模小的同类问题的子问题,然后递归调用方法来表示问题的解。我们可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词。可惜,第二个词里仍然有不懂的词,于是查第三个词...原创 2019-04-19 21:11:03 · 1274 阅读 · 1 评论 -
算法总结
算法已经研究了一段时间了,该来一个总结了。主要针对时间复杂度,空间复杂度,适应情况这三方面来一个对比。原创 2017-11-05 21:48:26 · 185 阅读 · 1 评论 -
快速排序
快速排序的特点快速排序是交换排序的一种,实质上是对冒泡排序的一种改进。使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。稳定性:不稳定时间复杂度Ο(n log n)空间利用率:递归导致栈空间的使用,最好空间复杂度为Ο(log n),最差空间复杂度Ο(n)快速排序的思想在n个记录中取某一个记录的键值为标准...原创 2017-10-15 20:58:57 · 1126 阅读 · 21 评论 -
希尔排序
希尔排序的特点希尔排序是对直接插入的一种优化稳定性:不稳定希尔排序的思想将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序,最后选择增量为1,即使用直接插入排序,使最终数组成为有序。希尔排序的代码 public string原创 2017-10-22 20:37:23 · 314 阅读 · 24 评论 -
冒泡排序
一、冒泡排序特点: 一种交换排序 相邻两两比较,若为逆序交换位置 当在一趟起泡过程中没有进行记录交换的操作,这个那个排序过程终止 时间复杂度:O(n2) 空间效率:仅使用了1个辅存单元 稳定性:稳定二、冒泡排序图形:三、冒泡排序核心代码:10个数进行冒泡排序// 冒泡(从小到大排序) ...原创 2017-09-27 09:28:48 · 557 阅读 · 36 评论 -
选择排序
一、选择排序特点:一个数分别和后面所有待排序的数进行比较时间复杂度:O(n2)稳定性:不稳定空间效率:只需要一个辅助空间二、选择排序图形:三、选择排序的代码10个数进行选择排序交换式://选择排序 @Test public void selectSort(){ int[] a = new int[]{3,1,4,...原创 2017-09-27 17:48:04 · 416 阅读 · 34 评论 -
插入排序
一、插入排序特点: 每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。时间复杂度:O(n2)稳定性:稳定 二、插入排序图形 三、插入排序的代码: 交换式 for (int i = 1; i <= a.Length-1; i++) { ...原创 2017-10-06 09:37:43 · 309 阅读 · 14 评论 -
贪心算法(背包问题)
贪心算法的思想:不从整体最优考虑,总是做出当前看来最好的选择。仅根据当前已有的信息做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。贪心算法的性质:1)最优子结构:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。2)贪心选择性:所谓贪心选择性质原创 2017-09-20 08:51:27 · 5417 阅读 · 38 评论 -
动态规划(0-1背包问题)
在这个暑假过程中,又学习到了很多的算法,发现算法真的是无处不在,很神奇。下面来简单介绍一下动态规划问题。 算法在我们生活中特别常见,例如一个小偷拿着容量为10的背包去商店偷东西,商店里有5种商品,每个商品的(重量,价值)分别为(2,6)、(2,3)、(6,5)、(5,4)、(4,6),小偷怎样才能在不超过背包容量的情况下,偷取价值总和最大的物品呢?动态规...原创 2017-09-18 16:58:08 · 1031 阅读 · 30 评论 -
【算法】插值查找算法
思想差值查找算法是对【算法】二分查找(折半查找)的一个优化。 二分查找算法选取的是中间位置:mid = (low + high)/2 插值查找算法选取的是自适应mid位置开始查找: mid= low + (key - a[low])(high - low)/(a[high] - a[low])使用场景插值查找算法通过上面计算的mid,可以判断你要查找的位置大概在哪里,对于表较长,且关...原创 2019-09-01 20:13:00 · 572 阅读 · 2 评论