左神算法笔记
Harrrold
这个作者很懒,什么都没留下…
展开
-
(一)、MaxGap
import java.util.Arrays;/** * @Description: 求乱序数组如果排序后相邻两个数的最大差值,要求时间复杂度O(N),不能用非基于比较的排序 * @author: harold * @date: 2021年11月10日 7:50 */public class MaxGap { //数组data[N] //设计N+1个桶bucket, 标号[0,N] //每个bucket有一个boolean[N+1] hasNum,一个int[N.原创 2021-11-10 08:56:10 · 209 阅读 · 0 评论 -
(一)、自定义比较器Comparator及其使用
/** * @Description: 自定义比较器及其使用方式 * @author: harold * @date: 2021年11月09日 19:12 */public class CustomComparator { public static class Student { public String name; public int id; public int age; public Student(Stri.原创 2021-11-09 19:21:51 · 655 阅读 · 0 评论 -
(一)、工程中的综合排序算法
1,有一个数组,首先对数据类型进行判断,是基础类型还是自定义的引用类型?大数组(数组长度>60): 基础类型-->快排 自定义引用类型(如:student)-->归并排序较短数组(数组长度≤60): 插入排序(因为常数项极低)...原创 2021-11-07 18:17:00 · 148 阅读 · 0 评论 -
(一)、排序的稳定性
在值相等的情况下,新顺序不打乱原始的相对顺序;原始数据 姓名 班级 分数 张三 1 55 李四 2 32 王五 1 66 马六 3 44 刘七 1 78 按分数排序 姓名 班级 分数 李四 2 32 马六 3 44 张三 1 55 王五 1 66 刘七 1 78 按班级排序 姓名 班级 分数原创 2021-11-07 17:11:14 · 79 阅读 · 0 评论 -
(一)、堆排序
/** * @Description: 堆排序 * @author: harold * @date: 2021年06月15日 22:09 */public class HeapSort { public static void sort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i < arr..原创 2021-11-07 16:13:06 · 90 阅读 · 0 评论 -
(一)、归并排序
/** * @Description: 归并排序 * @author: harold * @date: 2021年06月14日 8:05 */public class MergeSort { public static void sort(int[] arr) { if (arr == null || arr.length < 2) { return; } sortProcess(arr, 0, arr.le.原创 2021-11-06 22:17:37 · 73 阅读 · 0 评论 -
(一)、随机快排
/** * @Description: 随机快排 * @author: harold * @date: 2021年06月15日 14:35 */public class RandomQuickSort { public static void sort(int[] arr) { if (arr == null || arr.length < 2) { return; } sortProcess(arr, 0,.原创 2021-11-06 08:51:43 · 89 阅读 · 0 评论 -
(一)、选择排序
/** * @Description: 工程上基本不用,时间复杂度O(N^2) * @author: harold * @date: 2021年06月13日 10:17 */public class SelectSort { public static void sort(int[] arr) { if (arr == null & arr.length < 2) { return; } // i =.原创 2021-11-04 16:11:31 · 86 阅读 · 0 评论 -
(一)、插入排序
/** * @Description: 工程上用得比较多 * @author: harold * @date: 2021年06月13日 10:30 */public class InsertionSort { public static void sort(int[] arr) { if (arr == null && arr.length < 2) { return; } // i = [1.原创 2021-11-04 16:29:09 · 91 阅读 · 0 评论 -
(一)、冒泡排序
/** * @Description: 工程上基本不用,时间复杂度O(N^2) * @author: harold * @date: 2021年06月13日 8:49 */public class BubbleSort { public static void sort(int[] arr) { if (arr == null && arr.length < 2) { return; } //.原创 2021-11-04 16:04:01 · 73 阅读 · 0 评论 -
(二)、对数器Comparator
/** * @Description: 数组对数器,用来测试算法是否正确,笔试前准备好数组、二叉树等对数器模板 * @author: harold * @date: 2021年06月13日 16:50 */public class ArraySortComparator { /** * 对数器的基本概念如下: * 1. 有一个你想测试的算法a * 2. 实现一个绝对正确但复杂度高的算法b * 3. 实现一个随机样本产生器 * 4. 实现比.原创 2021-11-04 17:00:37 · 112 阅读 · 0 评论 -
(三)、Master公式:计算递归时间复杂度
Master公式(也称主方法)是用分治策略解决问题时,经常用来分析时间复杂度的方法。T [N] = a*T[N/b] + O (N^d)其中 a >= 1 and b > 1 是常量,其表示的意义是N表示问题的规模,a表示递归生成的子问题数,b表示每次递归是原来的1/b之一个规模,O(N^d)表示分解和合并所要花费的时间之和。解法:①当d<logb a时,时间复杂度为O(n^(logb a))②当d=logb a时,时间复杂度为O((n^d)*logn)③原创 2021-11-04 18:36:23 · 311 阅读 · 0 评论 -
(四)、荷兰国旗问题
/** * @Description: 荷兰国旗问题 * @author: harold * @date: 2021年06月14日 16:02 */public class DutchFlag { public static void sort(int[] arr, int num) { if (arr == null || arr.length < 2) { return; } sortProcess(ar.原创 2021-11-05 20:50:07 · 114 阅读 · 0 评论 -
(四)、小和问题
/** * @Description: 小和问题 * @author: harold * @date: 2021年06月14日 12:04 */public class SmallSum { public static int getSmallSum(int[] arr) { if (arr == null || arr.length < 2) { return 0; } return mergeSort(a.原创 2021-11-04 19:43:03 · 85 阅读 · 0 评论