数据结构之插入排序
目录
前言
插入排序
直接插入排序
插入排序的时间复杂度
希尔排序
前言
在日常生活中,我们不经意间会遇到很多排序的场景,比如在某宝,某东上买东西,我们可以自己自定义价格是由高到低还是由低到高,再比如在王者某耀中的每个英雄的荣耀战力,都是由高到低进行排序的,这些场景都用到了排序,但是这些场景的底层都是用一个个排序算法来实现的,本期开始,我们就要学习数据结构中很重要的一个知识点-------排序。
几种常见的排序:
注:我们今后所有的排序都默认排升序。
本期我们主要讲解插入排序。
插入排序
直接插入排序
直接插入排序在现实生活中最常见的应用其实就是斗地主时,我们一般会将牌拍好序,然后根据自己的打法打牌,大家先仔细想想,再给牌整理时我们是怎样整理的呢?当我们摸到第一张牌时,此时它已经有序,我们摸第二张牌时,就会与第一张牌做比较,然后发生交换使之成为我们想要的顺序,当我们摸第三张牌时,我们又会与最后一张牌与倒数第二张牌进行比较,交换之后使牌的顺序成为我们想要的顺序,之后每摸一张牌,就按照此方法进行整理,最后就会得到一个有序的牌列。这就直接插入排序的一个比较常见的应用场景。在数据结构中,我们怎样实现直接插入排序呢?
要实现直接插入排序,我们可以先将直接插入排序分解为单趟排序,然后再让每趟排序组合成为整个排序。
单趟排序:
单趟排序的情景:我们要将一个元素插入一个有序数组之中。可以类比,我们摸了一张牌还没有插入手中的牌中,但是手中的牌肯定已经是一个有序的牌序列了。
单趟排序的算法思想:我们令有序的数组的最后一个元素的位置为end,要插入的元素为x。要将x插入一个有序数组,就得先让x与end位置上的元素进行比较,因为我们是排升序,所以如果x比a[end]小,就要把a[end]向后挪动一个位置,然后将end--,然后在让x与此时end位置上的元素a[end]进行比较,比较的原理同上,直到将x插入到合理的位置,那么怎样判断这样的一趟排序已经结束了呢?其实就是x比当前end位置上的元素要大,这是一个结束条件,还有就是x比有序数组所有的元素都要小,即就是要将x放在数组的第一个元素的位置上,此时end已经到了数组第一个元素位置的前一个位置之前,我们称此时end==-1,所以综上,一趟排序的结束标志就是x>a[end]或者end<0
单趟排序代码实现:
int end = size - 1;int x;while (end >= 0){if (a[end] > x){a[end + 1] = a[end];end--;}else {break;}}a[end + 1] = x;
到了这里,我们单趟排序已经搞定了,但是上面我们已经说了,我们把整个插入排序分为了每趟排序,那么怎样将每趟排序合并成为直接插入排序呢?
每趟排序的关键点在于是把一个元素插入一个有序数组之中,其实对于一个数组而言,无论它是否是有序还是无序的,其第一个元素毋庸置疑肯定是有序的,这便是关键,我们可以从第一个与元素开始,把第一个元素当成一个有序数组,此时第二个元素就是要插入有序数组中的元素,那么此时第二哥元素插入由第一个元素组成的有序数组中就可以看成是一趟排序,这趟排序之后,第一个元素和第二个元素就组成了一个有序数组,第三个元素插入由第一个和第二个元素组成的有序数组就可以看成第二趟排序,由此依次进行多趟排序,那么整个数组的多趟排序就最终组成了直接插入排序。
直接插入排序完整代码:
void InsertSort(int* a, int size)
{assert(a);for(int end=0;end<size-1;end++){ int x = a[end + 1];while (end >= 0){if (a[end] > x){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = x;}
}
int main()
{int arr[] = { 10,9,8,7,6,5,4,3,2,1 };InsertSort(arr, sizeof(arr) / sizeof(int));for (int i = 0; i < sizeof(arr) / sizeof(int); i++){printf("%d ", arr[i]);}return 0;}
运行截图如下:
注意:
排序这里比较重要的就是边界的控制,对于直接插入排序而言,若数组的大小为size。end的初始值就是0,end的最终值就是size-2,x的初始位置就是1,x的最终位置就是size-1。
以上便是直接插入排序的整个过程。
插入排序的时间复杂度
最好:O(N),已经有序的数组,要插入的元素比end位置上的元素大,只用跟end位置上的元素比较一下。
最坏:O(N^2),逆序,要插入的元素比有序数组的所有元素都要小,跟end位置和end位置之前的所有元素都要比较一下。
稳定性:稳定。
希尔排序
希尔排序其实就是插入排序的进阶版,我们知道,一个数组越有序,直接插入排序的时间复杂度越低,希尔排序其实就是为了将一个无序的数组变得有序,使插入排序变得更加简单。
希尔排序如图:
希尔排序的思想:先设置一个gap值,先把整个数组的元素分成gap组,即下标差gap的为一组,然后对每一组按照直接插入排序的思想进行排序,每一组的排序将完成一次预排序,每完成一次预排序,数组会变得比之前更加有序。我们再改变gap的值多次进行预排序,当gap==1时,就是直接插入排序,此时因为经历了多次预排序,整个数组已经变得有序,所以此时再用直接插入排序对整个数组完成最终的排序。
希尔排序的整体代码:
void ShellSort(int* a, int size)
{int gap = size;while (gap > 1){gap /= 2;//进行一趟预排序for (int i = 0; i < gap; i++){//进行每组排序for (int end = i; end < size - gap; end += gap){int x = a[end + gap];//进行单趟排序while (end >= 0){if (a[end] > x){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = x;}}}
}
int main()
{int arr[] = { 10,9,2,8,6,5,4,3,11,1 };ShellSort(arr, sizeof(arr) / sizeof(int));for (int i = 0; i < sizeof(arr) / sizeof(int); i++){printf("%d ", arr[i]);}return 0;
}
运行截图如下:
当然,上述的方法是把三组的排序是分开的,每组自己排自己的,但是下面这种方法就是三种排序我们再一次排序中就全部排序完成,更为简洁,但是没有第一种好理解,可以理解为是第一种方法的进阶版本,但是这种进阶版本是我们经常使用的。
进阶版本代码如下:
void ShellSort(int* a, int size)
{int gap = size;while (gap > 1){gap /= 2;//进行一趟预排序,将多组排序在一次排序中就完成了,而不是按组进行排序for (int end = 0; end < size - gap; end++){int x = a[end + gap];//进行单趟排序while (end >= 0){if (a[end] > x){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = x;}}
}
int main()
{int arr[] = { 10,19,2,8,6,0,4,3,11,1 };ShellSort(arr, sizeof(arr) / sizeof(int));for (int i = 0; i < sizeof(arr) / sizeof(int); i++){printf("%d ", arr[i]);}return 0;
}
以上便是希尔排序的整个过程。
希尔排序的时间复杂度
希尔排序的时间复杂度为:
1.最好:O(N),当整个数组为有序数组时,复杂度最小。排序算法的时间复杂度的天花板就是O(N)
2.最坏:总共分成了gap组,每组大概就是size/gap个元素,如果每组都逆序,那么每组的复杂度又是一个1+2+...+size/gap的等差数列,平均是O(N^1.3)。
稳定性:不稳定。
插入排序的内容就是这些,我们需要注意的仍然是算法中边界的控制,在编写代码时,我们可以自己画图去控制边界,这是一个很好的方法。
好了,本期的内容到此结束^_^
相关文章:
数据结构之插入排序
目录 前言 插入排序 直接插入排序 插入排序的时间复杂度 希尔排序 前言 在日常生活中,我们不经意间会遇到很多排序的场景,比如在某宝,某东上买东西,我们可以自己自定义价格是由高到低还是由低到高,再比如在王者某…...
2023年江西省“振兴杯”网络信息行业(信息安全测试员)职业技能竞赛 Write UP
文章目录 一、2023csy-web1二、2023csy-web2三、2023csy-web3四、2023csy-web4五、2023csy-misc1六、2023csy-misc2七、2023csy-crypto1八、2023csy-re1 一、2023csy-web1 该题提供一个web靶场,《伟大的挑战者》,分值:5分 web页面一直在播放c…...
【5G PHY】5G NR 如何计算资源块的数量?
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...
解决oracle.sql.TIMESTAMP序列化转换失败问题 及 J2EE13Compliant原理
目录 报错现象报错内容处理方法Oracle驱动源码总结 报错现象 oracle表中存在TIMESTAMP类型的列时,jdbc查出来做序列化时报错 报错内容 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframewo…...
QQ2023备份
需要修改的路径(共3处) 这三处路径中,只有一处是需要修改的 QQPC端-主菜单-设置-基本设置-文件管理 点击上面的“”自定义“”,然后修改路径即可 修改路径后提示 然后等一会才会关干净QQ的相关进程,关闭后才会有自动…...
HNU计算机结构体系-实验2:CPU动态指令调度Tomasulo
文章目录 实验2 CPU动态指令调度Tomasulo一、实验目的二、实验说明三、实验内容问题1:问题2:问题3:问题4:问题5: 四、思考题问题1:问题2: 五、实验总结 实验2 CPU动态指令调度Tomasulo 一、实验…...
智慧城市是什么?为什么要建智慧城市?
智慧城市是一个通过现代科技手段推动城市管理和服务创新的概念。 具体来说,它利用信息技术和创新概念,将城市的各个系统和服务集成起来,以提升城市运行效率、优化城市管理和服务,改善市民的生活质量。 为什么要建智慧城市呢&…...
数据结构线性表-栈和队列的实现
1. 栈(Stack) 1.1 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 …...
IntelliJ IDEA 的 HTTP 客户端的高级用法
本心、输入输出、结果 文章目录 IntelliJ IDEA 的 HTTP 客户端的高级用法前言HTTP 请求对 gRPC 请求的支持对 GraphQL 和 WebSocket 请求的支持环境文件OpenAPI 补全用于持续集成的 HTTP 客户端 CLI花有重开日,人无再少年实践是检验真理的唯一标准IntelliJ IDEA 的 HTTP 客户端…...
代码随想录算法训练营第四十六天 _ 动态规划_198.打家劫舍、213.打家劫舍II、337.打家劫舍 III。
学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 198.打家劫舍 动态规划五步曲&a…...
ffmpeg编译问题
利用ffmpeg实现一个播放器,ffmpeg提供动态库,但是编译链接的时候遇到下面的问题: ../ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to sws_freeContext(SwsContext*) ../ffmpegWidgetPlayer/videoplayerwidget.…...
【flink番外篇】1、flink的23种常用算子介绍及详细示例(3)-window、distinct、join等
Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…...
centos7做gitlab数据灾备项目地址指向问题
如果你在 CentOS 7 上使用 GitLab 时,它回复的数据指向了另一个服务器的地址,可能是因为配置文件中的一些设置不正确。 要解决这个问题,可以尝试以下几个步骤: 检查 GitLab 配置文件:打开 GitLab 的配置文件…...
leetcode:93. 复原 IP 地址
复原 IP 地址 中等 1.4K 相关企业 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但…...
玄子Share-CSS3 弹性布局知识手册
玄子Share-CSS3 弹性布局知识手册 Flexbox Layout(弹性盒布局)是一种在 CSS 中用于设计复杂布局结构的模型。它提供了更加高效、简便的方式来对容器内的子元素进行排列、对齐和分布 主轴和交叉轴 使用弹性布局,最重要的一个概念就是主轴与…...
Nat easy IP ACL
0表示匹配,1表示任意(主机位0.0.0.255(255主机位)) rule deny source 192.168.2.1 0 设置拒绝192.168.2.1的主机通过 记住将其应用到接口上 [AR2]acl 2000 //创建基本ACL [AR2-acl-basic-2000]rule deny source 192…...
Numpy数组的数据类型汇总 (第4讲)
Numpy数组的数据类型 (第4讲) 🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…...
通讯app:
为了开发一个即时通讯的app,包含发送文字、语音、视频以及视频通话的功能,我们需要考虑以下的技术栈和实现步骤: 技术栈建议: 前端:React Native 或 Flutter 用于跨平台移动应用开发。后端:ThinkPHP Wor…...
【Backbone】TransNeXt:最新ViT模型(原理+常用神经网络汇总)
文章目录 一、近几年神经网络 Backbone 回顾1.Densenet 与 Resnet2.CBP3.SENet4.GCNet5.DANet6.PANet 与 FPN7.ASPP8.SPP-net9.PSP-net10.ECA-Net 二、TransNeXt(2023)1.提出问题2.Aggregated Pixel-focused Attention2.1 Pixel-focused Attention&#…...
使用Java将图片添加到Excel的几种方式
1、超链接 使用POI,依赖如下 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>Java代码如下,运行该程序它会在桌面创建ImageLinks.xlsx文件。 …...
用什么台灯对眼睛最好?考公护眼台灯推荐
之前我一直觉得,孩子近视,是因为玩手机太多,看电子产品的时间过长,但后来控制孩子看电子产品时间的触底反弹与越来越深的度数告诉我,孩子近视的真正原因,我根本没有找到,后来看到一篇报告&#…...
【嵌入式开发 Linux 常用命令系列 4.2 -- .repo 各个目录介绍】
文章目录 概述.repo 目录结构manifests/default.xmlManifest 文件的作用default.xml 文件内容示例linkfile 介绍 .repo/projects 子目录配置和管理configHEADhooksinfo/excludeobjectsrr-cache 工作区中的对应目录 概述 repo 是一个由 Google 开发的版本控制工具,它…...
【C++学习手札】基于红黑树封装模拟实现map和set
🎬慕斯主页:修仙—别有洞天 💜本文前置知识: 红黑树 ♈️今日夜电波:漂流—菅原纱由理 2:55━━━━━━️💟──────── 4:29 …...
linux查看当前路径的所有文件大小;linux查看当前文件夹属于什么文件系统
1:指令查看当前路径所有文件内存空间大小;这样可以方便查询每个文件大小情况,根据需要进行删除 df -h // 根目录 du -ah --max-depth1 // 一级目录 虚拟机 du -ah -d 1 // 一级目录 设备使用 du -ah --max-depth2 // 二…...
PPT插件-好用的插件-超级文本-大珩助手
常用字体 内置了大量的常用字体,方便快捷的一键更换字体,避免系统字体过多卡顿 文字整理 包含删空白行、清理编号、清理格式,便于处理从网络上复制的资料 文本打散与合并 包含文本打散、文本合并,文本打散可实现将一个文本打散…...
Kafka中的Topic
在Kafka中,Topic是消息的逻辑容器,用于组织和分类消息。本文将深入探讨Kafka Topic的各个方面,包括创建、配置、生产者和消费者,以及一些实际应用中的示例代码。 1. 介绍 在Kafka中,Topic是消息的逻辑通道࿰…...
LAMP部署
目录 一、安装apache 二、配置mysql 三、安装php 四、搭建论坛 4、安装另一个网站 一、安装apache 1.关闭防火墙,将安装Apache所需软件包传到/opt目录下 systemctl stop firewalld systemctl disable firewalld setenforce 0 httpd-2.4.29.tar.gz apr-1.6.2.t…...
DouyinAPI接口开发系列丨商品详情数据丨视频详情数据
电商API就是各大电商平台提供给开发者访问平台数据的接口。目前,主流电商平台如淘宝、天猫、京东、苏宁等都有自己的API。 二、电商API的应用价值 1.直接对接原始数据源,数据提取更加准确和完整。 2.查询速度更快,可以快速响应用户请求实现…...
AWS Remote Control ( Wi-Fi ) on i.MX RT1060 EVK - 3 “编译 NXP i.MX RT1060”( 完 )
此章节叙述如何修改、建构 i.MX RT1060 的 Sample Code“aws_remote_control_wifi_nxp” 1. 点击“Import SDK example(s)” 2. 选择“MIMXRT1062xxxxA”>“evkmimxrt1060”,并确认 SDK 版本后,点击“Next>” 3. 选择“aws_examples”>“aw…...
5G - NR物理层解决方案支持6G非地面网络中的高移动性
文章目录 非地面网络场景链路仿真参数实验仿真结果 非地面网络场景 链路仿真参数 实验仿真结果 Figure 5 && Figure 6:不同信噪比下的BER和吞吐量 变量 SISO 2x2MIMO 2x4MIMO 2x8MIMOReyleigh衰落、Rician衰落、多径TDL-A(NLOS) 、TDL-E(LOS)(a)QPSK (b)16…...
python epub文件解析
python epub文件解析 代码BeautifulSoup 介绍解释 代码 import ebooklib from bs4 import BeautifulSoup from ebooklib import epubbook epub.read_epub("逻辑思维训练1200题.epub")# 解析 for item in book.get_items():# 提取书中的文本内容if item.get_type() …...
Visual Studio 2015 中 FFmpeg 开发环境的搭建
Visual Studio 2015 中 FFmpeg 开发环境的搭建 Visual Studio 2015 中 FFmpeg 开发环境的搭建新建控制台工程拷贝并配置 FFmpeg 开发文件测试FFmpeg 开发文件的下载链接 Visual Studio 2015 中 FFmpeg 开发环境的搭建 新建控制台工程 新建 Win32 控制台应用程序。 具体流程&…...
期末速成数据库极简版【存储过程】(5)
目录 【7】系统存储过程 【8】用户存储过程——带输出参数的存储过程 创建存储过程 存储过程调用 【9】用户存储过程——不带输出参数的存储过程 【7】系统存储过程 系统存储我们就不做过程讲解用户存储过程会考察一道大题,所以我们把重点放在用户存储过程。…...
Android Studio的代码笔记--IntentService学习
IntentService学习 IntentService常规用法清单注册服务服务内容开启服务 IntentService 一个 HandlerThread工作线程,通过Handler实现把消息加入消息队列中等待执行,通过传递的intent在onHandleIntent中处理任务。(多次调用会按顺序执行事件…...
C语言 - 字符函数和字符串函数
系列文章目录 文章目录 系列文章目录前言1. 字符分类函数islower 是能够判断参数部分的 c 是否是⼩写字⺟的。 通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回0。 2. 字符转换函数3. strlen的使⽤和…...
Redis rdb源码解析
前置学习:Redis server启动源码-CSDN博客 1、触发时机 1、执行save命令--->rdbSave函数 2、执行bgsave命令--->rdbSaveBackground函数或者(serverCron->prepareForShutdown) 3,主从复制-->startBgsaveForReplication…...
深入理解CyclicBarrier
文章目录 1. 概念2. CylicBarier使用简单案例3. 源码 1. 概念 CyclicBarrier 字面意思回环栅栏(循环屏障),通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放…...
微信小程序 - 格式化操作 moment.js格式化常用使用方法总结大全
格式化操作使用 1. 首先,下载一个第三方库 moment npm i moment --save 注:在微信小程序中无法直接npm 下载 导入 的(安装一个就需要构建一次) 解决:菜单栏 --> 工具 --> 构建 npm 点击即可(会…...
学习pytorch18 pytorch完整的模型训练流程
pytorch完整的模型训练流程 1. 流程1. 整理训练数据 使用CIFAR10数据集2. 搭建网络结构3. 构建损失函数4. 使用优化器5. 训练模型6. 测试数据 计算模型预测正确率7. 保存模型 2. 代码1. model.py2. train.py 3. 结果tensorboard结果以下图片 颜色较浅的线是真实计算的值&#x…...
电子学会C/C++编程等级考试2021年09月(五级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:抓牛 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动到X-1或X+1,每次移动花费一分钟 2、从X移动到2*X,每…...
Halcon联合winform显示以及处理
在窗口中添加窗体和按钮,并在解决方案资源管理器中调加了导入Halcon导出的.cs文件,运行出现下图的问题: 问题1:CS0017 程序定义了多个入口点。使用/main(指定包含入口点的类型)进行编译。 解决方案1.: 右…...
【设计模式-4.3】行为型——责任链模式
说明:本文介绍设计模式中行为型设计模式中的,责任链模式; 审批流程 责任链模式属于行为型设计模式,关注于对象的行为。责任链模式非常典型的案例,就是审批流程的实现。如一个报销单的审批流程,根据报销单…...
单片机语言--C51语言的数据类型以及存储类型以及一些基本运算
C51语言 本文主要涉及C51语言的一些基本知识,比如C51语言的数据类型以及存储类型以及一些基本运算。 文章目录 C51语言一、 C51与标准C的比较二、 C51语言中的数据类型与存储类型2.1、C51的扩展数据类型2.2、数据存储类型 三、 C51的基本运算3.1 算术运算符3.2 逻辑…...
《每天一个Linux命令》 -- (5)通过sshkey密钥登录服务器
欢迎阅读《每天一个Linux命令》系列!在本篇文章中,将介绍通过密钥生成,使用公钥连接管理服务器。 概念 SSH 密钥是用于安全地访问远程服务器的一种方法。SSH 密钥由一对密钥组成:公钥和私钥。公钥存储在远程服务器上,…...
kubernetes的服务发现(二)
如前面的文章我们说了,kubernetes的服务发现是服务端发现模式。它有一个服务注册中心,使用DNS作为服务的注册表。每个集群都会运行一个DNS服务,默认是CoreDNS服务。每个服务都会在这个DNS中注册。注册的大致过程: 1、向kube-apise…...
【矩阵论】Chapter 4—特征值和特征向量知识点总结复习
文章目录 1 特征值和特征向量2 对角化3 Schur定理和正规矩阵4 Python求解 1 特征值和特征向量 定义 设 σ \sigma σ为数域 F F F上线性空间 V V V上的一个线性变换,一个非零向量 v ∈ V v\in V v∈V,如果存在一个 λ ∈ F \lambda \in F λ∈F使得 σ (…...
Linux 进程地址空间
知识回顾 在 C 语言的学习过程中,我们知道内存是可以被划分为栈区,堆区,全局数据区,字符常量区,代码区的。他的空间排布可能是下面的样子: 其中,全局数据区,可以划分为已初始化全局…...
websocket vue操作
let websocket: WebSocket; /** websocket测试 */ function connectWebsocket() {if (typeof WebSocket "undefined") {console.log("您的浏览器不支持WebSocket");return;}// let ip window.location.hostname ":8080";let ip "10.192…...
腾讯云CentOS8 jenkins war安装jenkins步骤文档
腾讯云CentOS8 jenkins war安装jenkins步骤文档 一、安装jdk 1.1 上传jdk-11.0.20_linux-x64_bin.tar.gz 1.2 解压jdk安装包文件 tar -zxvf jdk*.tar.gz 1.3 在/usr/local 目录下创建java目录 cd /usr/local mkdir java 1.4 切到java目录,把jdk解压文件改名为jd…...
Linux: glibc: net/if.h vs linux/if.h
最近看到一段代码改动,用net/if.h替换了linux/if.h。仔细看了看这两个的区别: https://stackoverflow.com/questions/20082433/what-is-the-difference-between-linux-if-h-and-net-if-h 从网上搜了一下看到如下的一个编译错误,如果同时使用这两个if.h文件,需要将net/if.h…...