
算法
笑一笑没什么大不了
IT女欢迎大家留言交流博主热情每天关注及时答复
展开
-
归并排序-java实现
归并排序 O(N*logN)用递归方法将排好序的半子表合并成为越来越大的有序序列,归并排序将两个已排序的表合并成一个表。采用先 “分割” 再 “合并” 的思想,我们首先把一个未排序的序列从中间分割成2部分,再把2部分分成4部分,依次分割下去,直到分割成一个一个的数据,再把这些数据两两归并到一起,使之有序,不停的归并,最后成为一个排好序的序列。因为归并排序每次都是在相邻的数据中进行...原创 2020-01-03 16:35:55 · 350 阅读 · 0 评论 -
选择排序-java实现
/** * 选择排序 * 找到最小的到数组的最左边,左边是有序的*对于长度为 N 的数组,选择排序需要大约 N2/2 次比较和 N 次交换。 *O(N^2) */public static void selectSort(){ int min =0; for (int i = 0; i < a.length; i++) { min = i; ...原创 2019-06-13 09:44:52 · 248 阅读 · 0 评论 -
插入排序-java实现
(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。插入的位置和前一个元素对比,较小就交换/** * 插入排序 * O(N^2) */public static int[] insertSort(int[] a){ if (a ==...原创 2019-06-13 10:45:35 · 1296 阅读 · 0 评论 -
希尔排序-java实现
是一种基于插入排序的快速的排序算法;对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组 的一端移动到另一端。例如,如果主键最小的元素正好在数组的尽头,要将它挪到正确的位置就需 要 N-1 次移动。希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部 进行排序,并最终用插入排序将局部有序的数组排序。现将待排序的数组元素分成多个子序列,使得每...原创 2019-06-13 11:18:55 · 490 阅读 · 0 评论 -
快速排序-java实现
* 平均时间复杂度:O(N*logN)* 选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。要点:找到基准左边和右边的进行一次交换,来让基准左边的比它小,基准右边的比它大/** * 快速排序 * */publi...原创 2019-06-14 11:28:14 · 224 阅读 · 0 评论 -
算法导论 笔记(一)
1.插入排序思想:机理和打扑克牌时,整理手中牌时差不多,摸起一张牌,将它与手中已有的牌从右到左比较,插入正确的位置;伪代码:java 实现插入的位置和前一个元素对比,较小就交换/** * 插入排序 * O(N^2) */public static int[] insertSort(int[] a){ if (a == null) retu...原创 2019-06-10 15:37:22 · 174 阅读 · 0 评论 -
二分查找-java实现
import java.util.Arrays;public class BinarySearch { /** * This class should not be instantiated. */ private BinarySearch() { } public static int indexOf(int[] a, int key) {...原创 2019-06-11 18:18:51 · 170 阅读 · 0 评论 -
动态规划-算法
记住求过的解来节省时间记住求解的方式有两种:①自顶向下的备忘录法②自底向上。只要问题可以划分成规模更小的子问题,并且原问题的最优解中包含了子问题的最优解,则可以考虑用动态规划解决。动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略动态规划和分治法区别:分治法中的各个子...原创 2019-07-08 10:26:43 · 333 阅读 · 0 评论 -
最长回文子串——动态规划
题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路:使用动态规划设状态dp[j][i]表示索引j到索引i的子串是否是回文串。则转移方程为:则dp[j][i]为true时表示索引j...原创 2019-07-02 16:04:48 · 4137 阅读 · 2 评论