算法
文章平均质量分 95
salmon1802
软件工程研2菜鸡
展开
-
考研数据结构常考的代码题总结 C语言实现
PATleetcode代码github备份数据结构习题集leetcode21PAT 6-1 单链表逆转 (20 分)leetcode 141. 环形链表PAT 6-2 顺序表操作集 (20 分)leetcode21/* Created by salmon on 2021-9-14 21:27.*//** * Definition for singly-linked list. * struct ListNode { * int val; * struct List原创 2021-09-15 00:10:38 · 2665 阅读 · 1 评论 -
不会真看不懂吧!KMP字符匹配算法(leetcode #28)
参考:【soso字幕】汪都能听懂的KMP字符串匹配算法【双语字幕】KMP,Sunday等高级算法在处理长文本时候有优势,在字符串较短时候因为需要预处理和额外空间,效率反而没有BF算法高比如leetcode #28,滑动窗口居然比kmp快得多:kmp实现: class Solution { public int strStr(String haystack, String needle) { if (needle.equals("")) return 0;.原创 2020-11-15 14:58:09 · 143 阅读 · 0 评论 -
优先队列和堆排序+排序方法总结
优先队列的概念优先队列本身用堆实现。假设已经有一堆数据在优先队列中,把他们从队列里挨个取出来的过程我们就可以称之为堆排序。优先队列可以随时取队中最大值,插入等优先队列:出队顺序和入队顺序无关,和优先级有关。动态选择优先级高的执行普通队列:先进先出,后进后出堆的概念:即用完全二叉树来维护的一组数据。一般的,进行一次操作的时间复杂度在O(1)~O(logn)之间。那么我们如何保证二叉树有序呢?需要用到两种操作:上浮:代码实现:private void swim(i..原创 2020-11-13 14:31:46 · 1364 阅读 · 0 评论 -
快速排序
快速排序快速排序在排序算法中具有排序速度快,而且是就地排序等优点。根据实际场景还有诸多改进方法,包括对小序列采用插入排序替代,三平均划分,三分区划分等改进方法流程描述:从数组左边向右找到第一个比a[0]大的数,从右边向左找到一个比a[0]小的数,并交换他们不重置指针,继续根据第一步的指针位置继续向下搜索,找到就交换,直到两个指针相遇将a[0]与右指针交换,此时a[0]不再改变位置以之前a[0]元素的所在位置(即a[j]如下图),把数组分为两部分,重复1.2.3.4.代码实现:..原创 2020-11-13 09:16:03 · 161 阅读 · 0 评论 -
归并排序
归并排序体现了分治的思想实现方法:将数据分为两组,再比较两组的第一个元素,较小的放入我们最终要输出的数组中,较大的放回原数组,再进行下一次比较。这时候我们会发现比较出来的元素不符合我们的顺序的需求这是因为归并排序的分组要求两个组是有序的那么怎么办呢,我们将原数组再度分组,一直到一组里只有一个元素为止,此时就可以确保组内有序 归并排序 自底向上的归并排序: 自顶向下的归并排序public class MergeBU {//自底向上的实现 private static Co.原创 2020-11-12 20:34:45 · 106 阅读 · 0 评论 -
1.选择排序 2.插入排序 3.希尔排序 4.冒泡排序
需要的方法及实现private static boolean less(Comparable v, Comparable w) { return (v.compareTo(w) < 0);}private static void exch(Comparable[] a, int i, int j) { Comparable swap = a[i]; a[i] = a[j]; a[j] = swap;} 性能分析:一种不稳定的的排序方法,平均时间复杂度为O(n^原创 2020-11-12 19:59:16 · 121 阅读 · 0 评论 -
二叉查找树(Java实现)
先来API:public class BST<Key extends Comparable<Key>, Value> { private Node root; private class Node { private Key key; private Value val; private Node left, right; private int N; public Node(Key key, Value val, int N) { this.k原创 2020-11-10 20:50:59 · 420 阅读 · 0 评论 -
顺序查找与二分查找(Java实现)
首先给出需要用到的API:--------------------------------------------------------------------顺序查找SequenceSearch首先给出实现代码:public class SequentialSearchST<Key, Value> { private Node first; private int N = 0; private class Node { Key key; Value val; No原创 2020-11-10 19:42:36 · 450 阅读 · 0 评论