当前位置: 首页 > news >正文

数据结构与算法--排序算法复习

目录

1.三种常见的简单排序:

1.1冒泡排序

1.2 选择排序

1.3 插⼊排序

2 常见高级排序算法

 2.1 希尔排序

2.2 快速排序

2.3 归并排序

2.4计数排序 


先上结论:

1.三种常见的简单排序:

1.1冒泡排序

1.⾸先在未排序数组的⾸位开始,和后⾯相邻的数字进⾏⽐较,如果前⾯⼀个⽐后⾯⼀个⼤
那么则进⾏交换。
2.接下来在将第⼆个位置的数字和后⾯相邻的数字进⾏⽐较,如果⼤那么则进⾏交换,直到将最⼤的数字交换的数组的尾部。
3.然后再从排序的数组的⾸位开始,重复前⾯两部将最⼤的数字交换到未排序数组的尾部 (交换到尾部的数字是已经拍好序的)。 如此反复,直到排序完毕。
代码。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void bubbleSort(vector<int> &v)
{for (int i = 0; i < v.size() - 1; i++){for (int j = 0; j < v.size() - i - 1; j++){if (v[j] > v[j + 1]){swap(v[j], v[j + 1]);}}}
}int main()
{vector<int> v = {10, 8, 2, 3, 1, 6, 7, 5, 4, 9};bubbleSort(v);for (auto i : v){cout << i << endl;}system("pause");return 0;
}

1.2 选择排序

 
1⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位置,
2.然后,再从剩余未排序元素中继续寻找最⼩(⼤)元素,然后放到已排序序列的末尾。
3.以此类推,直到所有元素均排序完毕。

void selectionSort(vector<int> &arr)
{int n = arr.size();int min_index; //最小值对应的index;for (int i = 0; i < arr.size(); i++){min_index = i; //默认最小值对应的起始索引是当前位置for (int j = i; j < arr.size(); j++){if (arr[j] < arr[min_index]){min_index = j;}}swap(arr[i], arr[min_index]);}
}

1.3 插⼊排序

1 从第⼀个元素开始,该元素可以认为已经被排序;
2 取出下⼀个元素,在已经排序的元素序列中从后向前扫描;
3 如果该元素(已排序)⼤于新元素,将该元素移到下⼀位置;
4 重复步骤 3 ,直到找到已排序的元素⼩于或者等于新元素的位置;
5 将新元素插⼊到该位置后;
6 重复步骤 2~5
// 插入排序函数
void insertionSort(vector<int> &arr)
{int n = arr.size();for (int i = 1; i < n; ++i){int key = arr[i];int j = i - 1;// 将大于key的元素向后移动while (j >= 0 && arr[j] > key){arr[j + 1] = arr[j];j = j - 1;}// 插入key到正确的位置arr[j + 1] = key;}
}

2 常见高级排序算法

       2.1 希尔排序

2.1 算法描述
1959 Shell 发明,第⼀批突破 O(n2) 时间复杂度的排序算法,是简单插⼊排序的改进版。它与插⼊排序的不同之处在于,它会优先⽐较距离较远的元素。希尔排序⼜叫缩⼩增 量排序
算法核⼼思想是先将整个待排序的记录序列分割成为若⼲⼦序列分别进⾏直接 插⼊排序 ,具体算法描述:
1.先根据数组的⻓度 /n ,获取增量 K (第⼀次 n 2
2.按增量序列个数 k 进⾏分组,⼀般可以分成 k 组;
3.根据以分好的组进⾏插⼊排序;(每组排序,根据对应的增量 k 来找到当前组的元素)
4.当每组都排序完毕之后,回到第⼀步将 n*2 再次分组进⾏插⼊排序,直到最终 k=1 的时候,在执⾏⼀次插⼊排序 完成最终的排序

void shellSort(vector<int> &arr)
{int n = arr.size();// 使用一组增量进行排序for (int gap = n / 2; gap > 0; gap /= 2){// 对每个增量进行插入排序for (int i = gap; i < n; i++){int temp = arr[i];int j;// 将元素插入到正确的位置for (j = i; j >= gap && arr[j - gap] > temp; j -= gap){arr[j] = arr[j - gap];}arr[j] = temp;}}
}

2.2 快速排序

快速排序是对冒泡排序的⼀种改进,通过分⽽治之的思想减少排序中交换和遍历的次数,整个过程可以通过递归的⽅式完成。
具体描述如下 :
1 ,⾸先通过⽐较算法 , 找到基准数,⽐较过程通过交换,最终达到基准数左边的数字都⽐较右边的要⼩。分⽐在头尾设置两个指针,并且再将尾部元素作为⽐较基准。
移动 L R 两个指针,直到重合,然后交换基准数字
2 ,然后以基准数作为中轴,将数组分为两部分,分⽐执⾏ 1 步骤的算法(可以通过递
归实现),直到⽆法再次分割排序完毕。
   递归
⼀个含直接或间接调⽤本函数语句的函数被称之为递归函数,它必须满⾜以下两个条件:
1 ) 在每⼀次调⽤⾃⼰时,必须是(在某种意义上)更接近于解;
2 ) 必须有⼀个终⽌处理或计算的准则。
 算法实现
分解 1 :创建左右两个指针,将最后⼀个值作为基准值,通过不断交换将数组分为两部
分,左边的⽐右边的要⼩。
先判断左指针和基准的值,如果⼩于等于就向后移动,直到遇到⽐基准值⼤的值
再判断右边指针和基准值,如果⼤于等于就向前移动,直到遇到⽐基准值⼩的值
然后交换左右指针的值。
循环上述操作,直到左右指针重合,然后交换重合值和基准值
// 根据基准元素将数组分成两部分,并返回基准元素的索引
int partition(vector<int> &arr, int low, int high)
{int pivot = arr[high]; //选择最后一个作为基准// 初始化较小元素的索引//递归里面的low 不一定是0开始的所以,写成0 一定报错int index = low;for (int j = low; j <= high - 1; j++){if (arr[j] <= pivot){swap(arr[j], arr[index]);index++;}}// 最后交换arr[i+1]和arr[high],将基准元素放在正确的位置swap(arr[index], arr[high]);return index;
}void quickSort(vector<int> &arr, int low, int high)
{if (low < high) //[0,0 ]就不在判断了。{// 获取基准元素的索引int pivotIndex = partition(arr, low, high);// 对基准元素的左边和右边子数组进行递归排序quickSort(arr, low, pivotIndex - 1);quickSort(arr, pivotIndex + 1, high);}
}

2.3 归并排序

1.归并排序是利⽤ 归并 的思想实现的排序⽅法,该算法采⽤经典的 分治 策略即将问题 成⼀
些⼩的问题然后 递归 求解,⽽ 的阶段则将分的阶段得到的各答案 " 修补 " 在⼀起,即分⽽
治之
2.
归并排序是稳定排序,它也是⼀种⼗分⾼效的排序,能利⽤完全⼆叉树特性的排序⼀般性
能都不会太差。 java Arrays.sort() 采⽤了⼀种名为 TimSort 的排序算法,就是归并排序
的优化版本。从上⽂的图中可看出,每次合并操作的平均时间复杂度为 O(n) ,⽽完全⼆叉
树的深度为 |log2n| 。总的平均时间复杂度为 O(nlogn) 。⽽且,归并排序的最好,最坏,
平均时间复杂度均为 O(nlogn)
归并排序核⼼思想是先分再治 , 具体算法描述如下 :
1.先将未排序数组 /2 进⾏分组 , 然后再将分好组的数组继续 /2 再次分组 , 直到⽆法分组 ,
个就是分的过程 .
2.然后在将之后再把两个数组⼤⼩为 1 的合并成⼀个⼤⼩为 2 的,再把两个⼤⼩为 2 的合
并成 4 , 同时在合并的过程中完成数组的排序 , 最终直到全部⼩的数组合并起来 , 这个
就是治的过程 .

       

治的过程中会为两个数组设计两个游标 , 和⼀个新的数组 .
        分⽐⽐较两个游标指对应数组的元素, 将⼩的插⼊到新的数组中
        然后向后移动较⼩的数组的游标, 继续进⾏⽐较 .
        反复前⾯两步, 最终将两个数组中的元素排序合并到新的数组中

#include <iostream>
#include <vector>// 合并两个已排序的子数组
void merge(std::vector<int>& arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;// 创建临时数组来存储两个子数组std::vector<int> leftArr(n1);std::vector<int> rightArr(n2);// 将数据复制到临时数组中for (int i = 0; i < n1; i++) {leftArr[i] = arr[left + i];}for (int i = 0; i < n2; i++) {rightArr[i] = arr[mid + 1 + i];}// 合并两个子数组int i = 0, j = 0, k = left;while (i < n1 && j < n2) {if (leftArr[i] <= rightArr[j]) {arr[k] = leftArr[i];i++;} else {arr[k] = rightArr[j];j++;}k++;}// 处理剩余的元素(如果有)while (i < n1) {arr[k] = leftArr[i];i++;k++;}while (j < n2) {arr[k] = rightArr[j];j++;k++;}
}// 归并排序函数
void mergeSort(std::vector<int>& arr, int left, int right) {if (left < right) {// 找到数组中间点int mid = left + (right - left) / 2;// 递归排序左半部分和右半部分mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);// 合并已排序的两个子数组merge(arr, left, mid, right);}
}int main() {std::vector<int> arr = {12, 11, 13, 5, 6, 7};std::cout << "原始数组: ";for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;// 调用归并排序函数mergeSort(arr, 0, arr.size() - 1);std::cout << "排序后数组: ";for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

2.4计数排序 

计数排序是⼀个⾮基于⽐较的排序算法,该算法于 1954 年由 Harold H. Seward 提出。它的优势在于在对⼀定范围内的整数排序时,它的复杂度为Ο (n+k) (其中 k 是整数的范围),快于任何⽐较排序算法。 当然这是⼀种牺牲空间换取时间的做法,⽽且当 O(k)>O(nlog(n))的时候其效率反⽽不如基于⽐较的排序(基于⽐较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)计数排序是⼀种适合于最⼤值和最⼩值的差值不是不是很⼤的排序,也就是说重复的数据
会⽐较多的情况。具体实现过程如下:⾸先遍历整个数组,找到最⼤的数字。
          然后根据最⼤的数字创建⼀个临时统计数组,⽤于统计每个数字出现的次数,例如temp[i] = m, 表示元素 i ⼀共出现了 m 次。最后再把临时数组统计的数据从⼩到⼤返回到原来的数组中,这样就是有序的。

实现:

        

#include <iostream>
#include <vector>void countingSort(std::vector<int>& arr) {int max_val = *std::max_element(arr.begin(), arr.end()); // 找到数组中的最大值int min_val = *std::min_element(arr.begin(), arr.end()); // 找到数组中的最小值int range = max_val - min_val + 1; // 计算数值范围// 创建计数数组并初始化为0std::vector<int> count(range, 0);// 计算每个元素的出现次数for (int num : arr) {count[num - min_val]++;}// 根据计数数组,重建原始数组int index = 0;for (int i = 0; i < range; i++) {while (count[i] > 0) {arr[index] = i + min_val;index++;count[i]--;}}
}int main() {std::vector<int> arr = {4, 2, 2, 8, 3, 3, 1};std::cout << "原始数组: ";for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;// 调用计数排序函数countingSort(arr);std::cout << "排序后数组: ";for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

相关文章:

数据结构与算法--排序算法复习

目录 1.三种常见的简单排序&#xff1a; 1.1冒泡排序 1.2 选择排序 1.3 插⼊排序 2 常见高级排序算法 2.1 希尔排序 2.2 快速排序 2.3 归并排序 2.4计数排序 先上结论&#xff1a; 1.三种常见的简单排序&#xff1a; 1.1冒泡排序 1.⾸先在未排序数组的⾸位开始&#…...

python随手小练1

题目&#xff1a; 使用python做一个简单的英雄联盟商城登录界面 具体操作&#xff1a; print("英雄联盟商城登录界面") print("~ * "*15 "~") #找其规律 a "1、用户登录" b "2、新用户注册" c "3、退出系统&quo…...

gym_unity学习笔记

最近学了一段时间gym_unity&#xff0c;把一些资料留在这里 实例 实例gym_unity训练RollerBall&#xff1a;https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall&#xff1a;https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码&#xff1…...

(三十)大数据实战——HBase集成部署安装Phoenix

前言 Phoenix 是一个开源的分布式关系型数据库查询引擎&#xff0c;它基于 Apache HBase构建。它提供了在 Hadoop 生态系统中使用 SQL查询和事务处理的能力。本节内容我们主要介绍一下Hbase如何集成部署安装Phoenix服务工具&#xff0c;并集成hive框架&#xff0c;能够快速、灵…...

【Python基础】S01E03 元组

P01S03 元组 定义元组元组无法修改定义一个元素的元素 修改元组变量方案一&#xff1a;关联新元组方案二&#xff1a;转换为列表 列表是可修改的&#xff0c;对于处理网站的用户列表或游戏中的角色列表至关重要。然而我们有时候需要创建一系列不可修改的元素&#xff0c;元组可…...

【算法-双指针思想】

双指针思想 双指针法&#xff08;快慢指针法&#xff09;&#xff1a; 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。 定义快慢指针 快指针&#xff1a; 寻找新数组的元素 &#xff0c;新数组就是不含有目标元素的数组 慢指针&#xff1a; 指向更新 新数组下…...

uni-app实现点击复制按钮 复制内容

注意:uni.setClipboardData({})里面的data参数必须是字符串类型这个是大坑 第一种 <view>{{orderId}}</view> //复制的内容 <button click"copy(orderId)">复制</button>copy(value) {uni.setClipboardData({data: value , // 这里是个坑接…...

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化 第14章 Qt 5多国语言国际化14.1 基本概念14.1.1 国际化支持的实现14.1.2 翻译工作&#xff1a;“*.qm”文件的生成 14.2 【实例】14.2.1 简单测试14.2.2 选择语言翻译文字 本章相关例程源码下载1.Qt5开发及实例_CH1401.rar 下载2.…...

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造&#xff1a;MAC与PHY的关系&…...

在华为云服务器上CentOS 7安装单机版Redis

https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉&#xff0c;点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…...

01_Bootstrap基础组件01

1 什么是 Bootstrap&#xff1f; Bootstrap&#xff0c;来自 Twitter&#xff0c;是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的&#xff0c;它简洁灵活&#xff0c;使 Web 开发更加快捷。它对 HTML、CSS 和 JavaScript 进行了封装&#xff0c;使它们…...

Java:OGNL对象图导航语言基本使用示例

OGNL是Object Graphic Navigation Language(对象图导航语言) 文档 https://commons.apache.org/proper/commons-ognl/language-guide.htmlhttps://github.com/orphan-oss/ognlhttps://ognl.orphan.software/developer-guide 引入依赖 <!-- https://mvnrepository.com/ar…...

中科院预警名单

2023年预警名单 (fenqubiao.com) 如果论文投稿到中国科学院预警期刊,可能会面临以下情况: 1. 预警期刊一般审稿周期长,容易出现迟迟不见回音的情况。 2. 这类期刊的学术质量参差不齐,接受论文的学术标准可能不严格。 3. 预警期刊发表论文的学术影响力比较有限,不容易为作者…...

Qt QCustomPlot介绍

介绍 主要介绍qcustomplot及其用法 最新版本:QCustomPlot Patch Release 2.1.1//November 6, 2022 下载:https://www.qcustomplot.com/index.php/download 官网:https://www.qcustomplot.com/index.php 简单使用 mainwindow.h /**************************************…...

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS&#xff08;跨源资源共享&#xff09;⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…...

C 初级学习笔记(基础)

目录 1.预处理器指令 预定义宏 预处理器运算符 &#xff08;\&#xff09; 参数化的宏 头文件 .h 引用头文件操作 2.函数&#xff08;标识符&关键字&运算符&#xff09;存储类 函数参数 a. 标识符&关键字 b. 运算符&#xff08;算术、关系、逻辑、位、赋…...

Nodejs 相关知识

Nodejs是一个js运行环境&#xff0c;可以让js开发后端程序&#xff0c;实现几乎其他后端语言实现的所有功能&#xff0c;能够让js与其他后端语言平起平坐。 nodejs是基于v8引擎&#xff0c;v8是Google发布的开源js引擎&#xff0c;本身就是用于chrome浏览器的js解释部分&#…...

【vue+elementUI】输入框样式、选择器样式、树形选择器和下拉框样式修改

输入框样式、选择器样式和下拉框样式修改 1、输入框和选择器的样式修改&#xff1a;2、下拉弹框样式A. 选择器的下拉弹框样式修改B. 时间选择器的下拉弹框样式修改C. vue-treeselect树形下拉框样式 1、输入框和选择器的样式修改&#xff1a; 写在style中不能加scoped&#xff0…...

JavaScript - canvas - 放大镜

效果 示例 项目结构&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>放大镜</title><style type"text/css">div {width: 200px;height: 200px;display: inline-bl…...

PY32F003F18之输入捕获

输入捕获是定时器的功能之一&#xff0c;配合外部引脚&#xff0c;捕获脉宽时间或采集周期。 CPU中的定时器最基本的功能就是计数功能&#xff0c;其次是输入捕获(IC)&#xff0c;再次就是比较输出(OC)&#xff0c;还有就是使用引脚对外部时钟进行计数&#xff0c;触发信号捕捉…...

科目三基础四项(一)

​ 第一天&#xff0c;基础操作&#xff0c;仪表&#xff0c;方向&#xff0c;挡位 按照模块来 1、方向盘两手在两侧 ​ 编辑 转向时的角度&#xff0c;只用&#xff1a;向左540&#xff0c;向右180 向左打和向右打的角度要抵消&#xff0c;回正 掉头向左打满再回 注意…...

C语言入门Day_24 函数与指针

目录 前言&#xff1a; 1.指针和数组 2.函数和指针 3.易错点 4.思维导图 前言&#xff1a; 我们知道数组是用来存储多个数据的&#xff0c;以及我们可以用指针来指向一个变量。那么我们可以用指针来指向一个数组中的数据么&#xff1f; 指针除了可以像指向一个变量一样指…...

9月21日,每日信息差

今天是2023年9月21日&#xff0c;以下是为您准备的14条信息差 第一、谷歌高管已经广泛讨论了在2027年之前将博通作为人工智能芯片供应商的可能性 第二、清华系团队宣布研发出千亿参数“制药版ChatGPT”&#xff0c;覆盖药物立项、临床前研究、临床试验的各阶段&#xff0c;作…...

【FAQ】安防监控系统/视频云存储/监控平台EasyCVR服务器解释器出现变更该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

Python手写人脸识别

Python手写人脸识别 引言 人脸识别是一种通过计算机视觉和模式识别技术来识别和验证人脸的技术。Python是一种广泛使用的编程语言,它提供了许多强大的库和工具来实现人脸识别。 在Python中,可以使用多种方法来实现人脸识别,包括基于特征提取的方法、基于深度学习的方法等…...

我的Qt作品(19)使用Qt写一个轻量级的视觉框架---第2章,仿海康VM实现思维导图拖拽方式的算法流程图

上次写的第1章介绍了主界面的设计。 https://blog.csdn.net/libaineu2004/article/details/130277151 本次是第2章&#xff0c;主要介绍流程图的运行。 目前市面上视觉框架很多&#xff0c;主要有列表图方式和流程图方式。海康VM的流程图方式比较受用户的喜爱和欢迎&#xf…...

仿写Timi记账

项目仿照Timi记账&#xff0c;本 APP 仅用作学习&#xff0c;如有侵权联系删除&#xff0c;项目地址&#xff1a;Timi记账 TIMI记账项目 简单功能对于tableview向上延伸部分采用了insertSubview形式&#xff1a;添加特殊字体添加.ttf文件获取plist文件数据 计算器功能说明简单逻…...

Java语言实现 比较两个Date日期的先后

在 Java 中&#xff0c;可以使用 Date 类的 compareTo() 方法或 before()、after() 方法来比较两个 Date 类型的日期的先后顺序。 使用 compareTo() 方法&#xff1a; Date date1 ...; // 第一个日期 Date date2 ...; // 第二个日期int result date1.compareTo(date2); if (…...

el-table 指定层级展开

先来看看页面默认全部展开时页面的显示效果&#xff1a;所有节点被展开&#xff0c;一眼望去杂乱无章&#xff01; 那么如何实现只展开指定的节点呢&#xff1f;最终效果如下&#xff1a;一眼看去很舒爽。 干货上代码&#xff1a; <el-table border v-if"refreshTabl…...

3288S Android11 适配红外遥控功能(超详细)

目录 一、rk3288平台红外遥控介绍二、原理图分析三、配置设备树并使能红外遥控功能四、打开红外打印功能&#xff0c;查看红外遥控的用户码和键值五、将查看到的红外遥控用户码和键值添加到设备树和.kl文件六、Android红外遥控.kl文件映射知识和使用添加新的.kl文件七、补充&am…...

在windows2003上做网站/网站设计公司官网

今天要做什么 使用Fragment进行分屏处理,制作底层 做了什么 完成任务 遇到的问题 因为以前做过了一个,所以这次没有遇到什么问题,开心.啊哈哈 转载于:https://www.cnblogs.com/yandashan666/p/10933260.html...

手机网站怎么做优化/温州网站优化推广方案

简单介绍 串口是一种非常通用的设备通信的协议&#xff08;不要与通用串行总线Universal Serial Bus(USB)混淆&#xff09;。大多数计算机包括两个基于RS232的串口。串口同一时候也是仪器仪表设备通用的通信协议&#xff1b;非常多GPIB兼容的设备也带有RS-232口。同一时候&…...

西乡网站建设/查排名官网

public class Account {final private Ref<Integer> balance new Ref<Integer>();public Account(int initialBalance) { balance.swap(initialBalance);//自带事务}public int getBalance() {return balance.get();//自带事务} 存款操作必须在一个事务中完成 原…...

php做电商网站的难点/企业网络的组网方案

《JAVA面试题集合》word版.docJAVA面试题集 基础知识1.C或Java中的异常处理机制的简单原理和应用。当JAVA程序违反了JAVA的语义规则时&#xff0c;JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发…...

个人网站流程/线下推广100种方式

记得那年我的自媒体成长之路&#xff0c;坎坎坷坷一路走来&#xff0c;在这期间也积累了许多经验&#xff0c;借此机会分享给大家&#xff0c;希望能对你有所帮助。1.首先是用心做事很多人可能会说我做事也很用心&#xff0c;为什么用心做事却没有回报呢?有些时候&#xff0c;…...

网站必须做电子标识信息/海外免费网站推广

2019独角兽企业重金招聘Python工程师标准>>> 错误 ueditor上传附件时显示和下载都是正常的&#xff0c;当下次点击在线附件时图片图标显示错误&#xff0c;再添加到网页中访问的时候出现404错误&#xff0c;比如&#xff1a; 第一次添加&#xff1a;http://192.168.…...