算法
要淡定_少年
这个作者很懒,什么都没留下…
展开
-
快速排序算法笔记
1,思想:快速排序算法通过避免不必要的比较操作来减少时间复杂度。同时不会增加空间复杂度。 2,实现方式: 1)通过选定一个数据项作为参照轴,从数据两端开始向中间扫描,把比轴小的数据项交换到低端,把比轴大的数据项交换到高端,直到低端指针与高端指针相遇时完成一次分割。此时轴会位于正确的序列位置上。 2)然后,对被轴分割的两个子序列使用相同的方式进行递归排序。 3,java代码实现: pack原创 2015-07-25 19:23:28 · 443 阅读 · 0 评论 -
动态规划钢条切割算法简记
private int dynamicAlgorithm(int n) { int[] cache = new int[n + 1]; for (int i = 1; i <= n; i++) {//钢条规模从1到n int temp = Integer.MIN_VALUE; for (int j = ...原创 2018-12-07 11:45:28 · 512 阅读 · 0 评论 -
堆排序算法笔记
1,堆排序算法是树形选择排序的改进,使其空间复杂度降低到O(1),时间复杂度O(nlogn)。 思想:通过将输入序列构建成大顶堆。并在插入,删除,修改的过程中重新向上或向下调整成大顶堆。使最大的数据在堆顶。所以在输出过程中每次取出堆顶元素输出就得到输入序列的降序排列。重点是向上和向下调整成大顶堆的算法。 2,Java代码基本实现: /** * 树形选择排序的改进:堆排序。 * Creat原创 2016-08-11 22:34:52 · 343 阅读 · 0 评论 -
二叉树的反转,递归实现和非递归实现。
package com.alg; import java.util.Stack; /** * Created by lchli on 2016/3/5. */ public class BTreeRevert { public static class Node { public Node left; public Node right;原创 2016-03-05 19:38:02 · 2216 阅读 · 0 评论 -
string转换成int的算法
public static int stringToInt(String input) { if (!isValidString(input)) { throw new IllegalArgumentException("input is not a number string!!"); } boolean isNegative = isNegative(input); i原创 2015-07-23 10:22:51 · 1559 阅读 · 0 评论 -
二分查找算法笔记。
1,针对有序序列的查找算法,时间复杂度logN. 2,java代码的递归实现: public static int binarySearch(int[] array, int target, int left, int right) { if (left > right) return -1; int midIndex = (left + right) / 2;原创 2015-07-28 10:43:36 · 396 阅读 · 0 评论 -
归并排序算法笔记
1,思想:采用先化整为零,然后合零为整的思想。即先把序列一分为二,再把子序列一分为二,依次下去直到不能再分割即到子序列只有一个元素。最后将分割的子序列使用合并排序。 2,效率:空间复杂度加倍;时间复杂度为N*logN,与快速排序,基数排序相同。 3,Java代码的递归实现: public class MergeSorter { public static void mergeSo原创 2015-07-27 11:54:14 · 415 阅读 · 0 评论 -
希尔排序算法笔记
1,思想:对序列相同间隔上的元素使用插入排序,同时不断减小间隔直到间隔为1。间隔选取公式,通常为:h=3*h+1(h初始1)。通过增大移动距离,减少移动次数的方式使之比普通插入排序更高效。 2,效率:时间复杂度约N的1.5次方。 3,Java代码实现:原创 2015-07-27 12:12:29 · 381 阅读 · 0 评论 -
选择排序算法笔记
1,思想:通过比较查找序列中的最小值索引,然后把最小值交换到最左端。同理依次查找每一个子序列。 2,选择排序拥有和冒泡排序同样的比较时间即时间复杂度N的平方,但是只需进行约N次交换。所以效率比冒泡排序高。 3,java实现: package aglogim; public class SelectSorter { public static void selectSort(int[]原创 2015-07-26 14:29:43 · 357 阅读 · 0 评论 -
插入排序算法笔记
1,思想:通过选取子序列最右端的数作为标记,向左比较,把比标记小的数存储在它的后边相邻位置,到头后将标记值存储在当前指针的位置。每完成一次内部循环会产生一个局部有序的子序列。 2,时间复杂度为N的平方。比冒泡和选择排序快。 3,java实现: package aglogim; public class InsertSorter { public static void insertS原创 2015-07-26 17:37:20 · 390 阅读 · 0 评论 -
冒泡排序算法笔记
1,思想: 1)从数据序列左边开始相邻的两个数据进行比较,两者是逆序则相互交换,然后继续往后比较直到到达末尾,第一轮结束,此时最大的数会在最右端正确位置上。 2)如上进行下一轮的比较。直到完成n轮。 2,时间复杂度为N的平方。 3,java代码实现: package aglogim; public class BubSorter { public stati原创 2015-07-26 13:56:58 · 356 阅读 · 0 评论 -
冒泡排序算法代码
private void bubleSort(int[] data) { int size = data.length; while (size >= 2) { boolean exchanged = false; for (int i = 0; i < size - 1; i++) { ...原创 2019-03-22 16:42:09 · 235 阅读 · 0 评论