![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
头发阻挡了我对知识的吸收
还没秃的小菜鸡
头发阻挡了我对知识的吸收
展开
-
归并排序与随机快排
1.1 归并排序1、 整体是递归的,左边排好序右边排好序,最后merge让整体有序,merge过程需要申请和被排序数组等长度的辅助空间2、 让其整体有序的过程里用了排外序的方法3、 利用master公式来求解归并的时间复杂度4、 归并排序可改为非递归实现1.1.1 递归思路:主函数希望一个数组的0~3位置排序f(arr, 0, 3)第一层递归希望f(arr, 0, 1)和f(arr, 2, 3)分别有序。第二层递归:f(arr, 0, 1)希望f(arr, 0, 0)和f(arr, 1, 1原创 2020-10-31 16:23:46 · 190 阅读 · 0 评论 -
链表结构、栈、队列、递归行为、哈希表和有序表
前言从物理存储角度来看,只有两种结构:数组结构和链表结构数组结构:就是在内存中开辟一块连续的空间,各个元素排排坐,不能超过开辟的空间长度;链表结构:不预先开辟空间,各个元素不一定连续挨着,但是每个元素都有它下一个元素的"地址",通过地址找到下一位,这就是(单向)链表,像链条一样 一个链一个;其他的像栈,队列,树都是逻辑上的结构链表结构(物理结构)单向链表一个链表中,每个节点有且只有它的下一个节点的引用public class Node { public int val原创 2020-10-13 10:42:22 · 208 阅读 · 0 评论 -
选择、冒泡、插入、二分、位运算
选择public class SelectSort { //选择排序 public static void main(String[] args) { int[] arr = {2, 4, 3, 1, 5, 3, 7, 5, 9}; selectSort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]);原创 2020-09-30 14:26:30 · 143 阅读 · 0 评论 -
Java常用运算符
&(按位与)&按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 ,0&0=03的二进制位是0000 0011 , 5的二进制位是0000 0101 , 那么就是011 & 101,由按位与运算规则得知,001 &101等于0000 0001,最终值为17的二进制位是0000 0111,那就是111 & 101等于101,也就是0000 0101,故原创 2020-09-30 10:00:21 · 81 阅读 · 0 评论 -
时间复杂度与空间复杂度
时间复杂度时间复杂度的概念一般情况下,算法的基本操作重复执行的次数是模块n的某一函数f(n),因此,算法的时间复杂度记做 T(n) = O(f(n))。 随着模块n的增大,算法执行的时间增长率f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)计算时间复杂度计算出基本操作的执行次数T(n) 基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语句的频度。在做算法分析时,一般默认为考虑原创 2020-09-29 17:31:40 · 262 阅读 · 0 评论 -
数据结构:八大数据结构分类
数组(Array)数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。数组可以说是最基本的数据结构,在各种编程语言中都有对应。一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。栈( Stack)栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数原创 2020-09-08 08:20:00 · 612 阅读 · 0 评论