首页
3D照片墙
统计
留言
Search
1
1.OAuth 的简单理解
115 阅读
2
多个拦截器的执行顺序
105 阅读
3
基于Annotation方式的声明式事务
102 阅读
4
6.设计模式汇总
101 阅读
5
Unity 依赖注入
98 阅读
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
Search
标签搜索
排序算法
vue
算法
遍历
docker
线性
数组
dom
synchronized
数据库
xml语言
log4j
bigint
静态函数
静态方法
哈夫曼树
const
冒泡排序
商标设计
命令模式
Bi8bo
累计撰写
304
篇文章
累计收到
6
条评论
首页
栏目
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
页面
3D照片墙
统计
留言
搜索到
10
篇与
的结果
2024-09-21
数据结构与算法
数据结构包括:线性结构和非线性结构 线性结构: 作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构()。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 线性结构常见的有:数组、队列、链表和栈 非线性结构: 非线性结构包括:二维数组,多维数组,广义表,树结构,图结构
2024年09月21日
96 阅读
0 评论
55 点赞
2024-09-19
排序算法 - 1.冒泡排序
冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。 冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。 # include <stdio.h> int main(void) { int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500}; int n; //存放数组a中元素的个数 int i; //比较的轮数 int j; //每轮比较的次数 int buf; //交换数据时用于存放中间数据 n = sizeof(a) / sizeof(a[0]); /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/ for (i=0; i<n-1; ++i) //比较n-1轮 { for (j=0; j<n-1-i; ++j) //每轮比较n-1-i次, { if (a[j] < a[j+1]) { buf = a[j]; a[j] = a[j+1]; a[j+1] = buf; } } } for (i=0; i<n; ++i) { printf("%d\x20", a[i]); } printf("\n"); return 0; } 算法分析 冒泡排序一共要进行(n-1)次循环,每一次循环都要进行当前n-1次比较所以一共的比较次数是:(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;所以冒泡排序的时间复杂度是 O(n^2)
2024年09月19日
62 阅读
0 评论
68 点赞
2024-05-17
排序算法 - 3.归并排序(Merge Sort)
归并排序(Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 public class Merge { public static void main(String[] args) throws Exception { Integer[] arr = {8, 4, 5, 7, 1, 3, 6, 2}; Merge.sort(arr); System.out.println(Arrays.toString(arr)); } private static Comparable[] assist;//归并所需要的辅助数组 /* 对数组a中的元素进行排序 */ public static void sort(Comparable[] a) { assist = new Comparable[a.length]; int lo = 0; int hi = a.length - 1; sort(a, lo, hi); } /* 对数组a中从lo到hi的元素进行排序 */ private static void sort(Comparable[] a, int lo, int hi) { if (hi <= lo) { return; } int mid = lo + (hi - lo) / 2; //对lo到mid之间的元素进行排序; sort(a, lo, mid); //对mid+1到hi之间的元素进行排序; sort(a, mid + 1, hi); //对lo到mid这组数据和mid到hi这组数据进行归并 merge(a, lo, mid, hi); } /* 对数组中,从lo到mid为一组,从mid+1到hi为一组,对这两组数据进行归并 */ private static void merge(Comparable[] a, int lo, int mid, int hi) { //lo到mid这组数据和mid+1到hi这组数据归并到辅助数组assist对应的索引处 int i = lo;//定义一个指针,指向assist数组中开始填充数据的索引 int p1 = lo;//定义一个指针,指向第一组数据的第一个元素 int p2 = mid + 1;//定义一个指针,指向第二组数据的第一个元素 //比较左边小组和右边小组中的元素大小,哪个小,就把哪个数据填充到assist数组中 while (p1 <= mid && p2 <= hi) { if (less(a[p1], a[p2])) { assist[i++] = a[p1++]; } else { assist[i++] = a[p2++]; } } //上面的循环结束后,如果退出循环的条件是p1<=mid,则证明左边小组中的数据已经归并完毕,如果退出循环的条件是p2<=hi,则证明右边小组的数据已经填充完毕; //所以需要把未填充完毕的数据继续填充到assist中,//下面两个循环,只会执行其中的一个 while (p1 <= mid) { assist[i++] = a[p1++]; } while (p2 <= hi) { assist[i++] = a[p2++]; } //到现在为止,assist数组中,从lo到hi的元素是有序的,再把数据拷贝到a数组中对应的索引处 for (int index = lo; index <= hi; index++) { a[index] = assist[index]; } } /* 比较v元素是否小于w元素 */ private static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } /* 数组元素i和j交换位置 */ private static void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } } 时间复杂度为O(nlogn); 归并排序的缺点: 需要申请额外的数组空间,导致空间复杂度提升,是典型的以空间换时间的操作。
2024年05月17日
33 阅读
0 评论
68 点赞
2024-04-13
3.环形队列
思路如下: front变量的含义做一个调整:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素 front的初始值=0 2.rear变量的含义做一个调整: rear指向队列的最后一个元素的后一个位置.因为希望空出一个空间做为约定. rear的初始值=0 3.当队列满时,条件是(rear +1) % maxSize = front【满】 4.对队列为空的条件,rear == front空
2024年04月13日
48 阅读
0 评论
69 点赞
2024-02-20
1.稀疏数组
概念 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组
2024年02月20日
31 阅读
0 评论
50 点赞
1
2