数据结构与算法
AlexAuthor7
这个作者很懒,什么都没留下…
展开
-
6-5 数组队列和链表队列性能对比
【实现】public class Main { public static void main(String[] args) { int opCount = 100000; ArrayQueue<Integer> arrayQueue = new ArrayQueue<>(); LinkedListQueue<Integer> linkedListQueue = new LinkedListQueue<>原创 2021-01-18 22:51:06 · 238 阅读 · 0 评论 -
6-4 改进我们的链表(用以实现队列)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlRg0Ncr-1610469237605)(7F98D99916094B9DB393F88FD15C1E65)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZd63k97-1610469237611)(9F30BF730F9D4DB89FC33CC2B04FB321)]【实现】public class LinkedListQueue<E> implements Queue&原创 2021-01-18 22:42:55 · 86 阅读 · 0 评论 -
8-2测试归并排序的性能
验证复杂度为 O(nlogn)public static void main(String[] args) { int [] dataSize = {100000,1000000}; for(int n:dataSize){ Integer[] data = ArrayGenerator.generateRandomArray(n,n*100); long start = System.nanoTime();//纳秒原创 2021-01-18 22:42:01 · 97 阅读 · 0 评论 -
10-1 二分查找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HwysHLUx-1610469964685)(22D67B16450440C2999668867603ABE9)]【递归版本实现】public class BinarySearch { private BinarySearch() { } public static <E extends Comparable<E>> int search(E[] arr, E target)原创 2021-01-18 22:41:18 · 132 阅读 · 0 评论 -
6-3 链表与数组栈的性能比较
【实现】public static void main(String[] args) { int opCount = 100000; ArrayStack<Integer> arrayStack = new ArrayStack<>(); LinkedListStack<Integer> linkedListStack = new LinkedListStack<>(); double time原创 2021-01-18 22:40:17 · 90 阅读 · 0 评论 -
7-3 使用递归实现链表
【实现】public class LinkedList<E> { private class Node{ public E e; public Node next; public Node(E e, Node next){ this.e = e; this.next = next; } public Node(E e){ this原创 2021-01-14 00:39:55 · 147 阅读 · 0 评论 -
6-2 使用链表实现栈
【实现】public class LinkedListStack<E> implements Stack<E> { private LinkedList<E> list; public LinkedListStack(){ list = new LinkedList<>(); } @Override public int getSize() { return list.getSize(原创 2021-01-14 00:39:05 · 70 阅读 · 0 评论 -
8-1归并排序的实现
基本思想[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feZ2bhuI-1610469446633)(199870C6B84A4C519FF8BE51F2A9D9E0)]复杂度 O(nlogn)核心问题:如何进行归并比较A[0] 和 B[0]哪个小,取出小的元素,继续比较【实现】public class MergeSort<E>{ private MergeSort(){} public static <E extends原创 2021-01-14 00:37:55 · 73 阅读 · 0 评论 -
8-3 观察归并算法的微观(迭代)过程
【实现】public class MergeSort<E>{ private MergeSort(){} public static <E extends Comparable<E>>void sort(E[] arr){ sort(arr,0, arr.length-1,0); } public static <E extends Comparable<E>>void sort(E[] arr,原创 2021-01-14 00:35:51 · 107 阅读 · 1 评论 -
8-5 自底向上的归并排序算法
【实现】public class MergeSort3 { private MergeSort3(){} public static <E extends Comparable> void sortBU(E[] arr){ E[] temp = Arrays.copyOf(arr, arr.length); int n = arr.length; // 使用插入排序优化 // 遍历一遍,对所有 arr[i, i +原创 2021-01-14 00:34:48 · 160 阅读 · 0 评论 -
9-1 快速排序的实现
【实现1】(需要开辟额外的空间)public class QuickSort { private QuickSort(){} public static <E extends Comparable<E>> void sort(E[] arr){ E[] temp = (E[])new Object[arr.length]; sort(arr,0,arr.length-1,temp); } public static &原创 2021-01-14 00:33:54 · 113 阅读 · 0 评论 -
9-2 快速排序的微观解读
【实现】public class QuickSort2 { private QuickSort2(){} public static <E extends Comparable<E>> void sort(E[] arr){ sort(arr,0,arr.length-1,0); } public static <E extends Comparable<E>> void sort(E[] arr,int l,原创 2021-01-14 00:32:57 · 120 阅读 · 0 评论 -
9-3 优化快速排序对于特殊数组的性能退化问题
【优化1】第一版快速排序的对象是有序数组时,递归深度为O(n),容易造成栈溢出[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbzHkMhM-1610469804197)(347A6AB82C234141BFBB5292C5705FEE)]使p的索引为[l,r]中的一个随机数,再将他和 l 调换位置public static <E extends Comparable<E>> int partition(E[] arr,int l,int r,原创 2021-01-14 00:32:14 · 378 阅读 · 0 评论 -
9-5 三路快速排序算法
实现原理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iTE3pZJe-1610469861174)(C0CEA802827C4C1D86A9E54022CD6E42)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDNyb47s-1610469861177)(D4AAE62AB0224EC5940178CC8859D23A)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2W9cC6Fw-1610469原创 2021-01-14 00:31:30 · 102 阅读 · 0 评论 -
10-2 非递归实现leetcode 最小的K
【实现】class Solution { public int findKthLargest(int[] nums, int k) { Random random = new Random(); return selectK(nums,0,nums.length-1,nums.length-k,random); } private int selectK(int[] arr,int l,int r,int k,Random random){原创 2021-01-14 00:29:58 · 79 阅读 · 0 评论 -
5-2 栈的实现
基本功能[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3LRZZmK-1610469089793)(D3C0144A7FD44573B9FF652E616CF7C6)]面向对象迭代[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNhxU9NF-1610469089796)(E0BA029B2D7F4D93A25CFCAED164BEFB)]【Stack接口】public class Main { public static原创 2021-01-18 22:43:07 · 76 阅读 · 0 评论 -
6-1链表的实现
链表的结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GaacuLKh-1610469021765)(30C6BB495DAC4DD4B8CC6927C8862AEC)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nICOA4zS-1610469021767)(D9C77D05D4514216A00195ACF10EFFA1)]数组与链表的对比[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbnP80原创 2021-01-13 00:31:00 · 143 阅读 · 0 评论 -
5-7 双端队列的实现
基本功能[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtFed5es-1610468959650)(CCF7A000C2C44021847001DD157369D4)]【实现】public class ArrayDeque<E> implements Deque<E> { private E[] data; private int front; private int tail; private int size原创 2021-01-13 00:29:56 · 91 阅读 · 0 评论 -
5-6 数组队列饿汉循环队列性能的比较
【实现代码】分别进行10 万次出队 和 入队public class Main { //测试使用q 运行opCount 个 enqueue 和 的dequeue 操作所需要的时间,单位:秒 private static double testQueue(Queue<Integer> q,int opCount){ long start = System.nanoTime(); Random random = new Random();原创 2021-01-13 00:28:57 · 77 阅读 · 0 评论 -
5-4数组队列的实现
说明对垒也是一种线性结构相比数组,对垒对应的操作是数组的子集只能从一端(队尾)添加元素,只能从另一端(队首)取出元素队列是一种先进先出的数据结构(First In First Out [FIFO])基本功能[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFX0T7xf-1610468823676)(6A1A676DE35E431EB0E8B605B6482233)]【Queue接口】public class ArrayQueue<E> implem原创 2021-01-13 00:27:33 · 89 阅读 · 0 评论 -
4-1 属于我们自己的动态数组
主要功能增删改查看数组的容量(能装多少东西)查看数组的长度(装了多少东西)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j2ThOhiu-1610468614451)(C14C521FE9AD47E088F48D4BE50E395C)]【实现1】/** * @Auther: Alex * @Date: 2021/1/4 - 01 - 04 -19:57 * @Description: 自定义的数组 * @Verxion: 1.0 */publi原创 2021-01-13 00:24:19 · 71 阅读 · 0 评论 -
3-2 插入排序的重要特性
对于有序数组,插入排序的复杂度是O(n)的整体来说,插入排序的复杂度依然是O(n^2)的对比,选择排序的复杂度永远是O(n^2)后期,我们经常利用插入排序的这一特性,对高级的排序算法进行优化...原创 2021-01-13 00:22:51 · 295 阅读 · 0 评论 -
3-1 插入排序的实现与迭代
【实现1】public static <E extends Comparable<E>>void sort(E[] arr){ for (int i = 0; i < arr.length; i++) { for (int j = i; j-1 >= 0; j--) { if(arr[j].compareTo(arr[j-1]) < 0){ E temp原创 2021-01-13 00:21:46 · 204 阅读 · 0 评论 -
2-1 选择排序的实现与迭代
思路[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zc72l5tw-1610468286438)(AD9015E404F44105AB92FB50917FA297)]时间复杂度 O(n^2)【实现1】3 可否进行原地排序[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KyeQv9aq-1610468286441)(86A4393B208E4DBD9842E78BFA1525A8)] public static void sort原创 2021-01-13 00:20:14 · 149 阅读 · 1 评论 -
1-1 线性查找的实现与迭代
【实现1】优化把构造器私有,让外部无法实例化类的对象写了static后, 用户在使用 search 方法时可以直接用类名.方法的方式调用,不用实例化一个对象。public class LinearSearch { //把构造器私有,让外部无法实例化类的对象 private LinearSearch(){} //写了static后, 用户在使用 search 方法时可以直接用 类名.方法的方式调用,不用实例化一个对象。 public static int原创 2021-01-13 00:17:52 · 95 阅读 · 0 评论 -
1-4 测试查找算法的性能
生成有顺序的数组public class ArrayGenerator { private ArrayGenerator(){} public static Integer[] generateOrderedArray(int n){ Integer[] arr = new Integer[n]; for (int i = 0; i < n; i++) { arr[i] = i; } retur原创 2021-01-13 00:15:03 · 100 阅读 · 0 评论