算法设计与分析——十大经典排序算法一(1--5)
目录
算法设计与分析——十大经典排序算法
第1关:冒泡排序
参考代码
第2关:选择排序
参考代码
第3关:插入排序
参考代码
第4关:希尔排序
参考代码
第5关:归并排序
参考代码
作者有言
一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.comTime of completion:2023.2.28
Last edited: 2023.2.28导读:
帮助算法设计初学者快速掌握算法设计,帮助安静对ABCD……等的重要性排序更清晰!
算法设计与分析——十大经典排序算法
第1关:冒泡排序
任务描述
本关任务:实现冒泡排序算法,并将乱序数列变成升序。
相关知识
为了完成本关任务,你需要掌握:1.冒泡排序算法。
冒泡排序算法
冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换。重复地进行遍历直到没有再需要交换时表示数列已经排序完成。
-
算法步骤:
-
比较相邻的元素:若第一个比第二个大,则交换;
-
遍历开始第一对到结尾最后一对,执行步骤
1
; -
重复步骤
1
~2
,直到排序完成。
-
-
可改进的冒泡排序:第一趟排序之后最后一个元素是最大的,因此下一趟遍历只需执行到倒数第二对。
编程要求
本关的编程任务是补全右侧代码片段sort_array
中Begin
至End
中间的代码,具体要求如下:
- 在
sort_array
中,实现冒泡排序算法,完成指定输出。
测试说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
10
7 1 4 6 8 9 5 2 3 10
预期输出:
1 4 6 7 8 5 2 3 9 10
1 4 6 7 5 2 3 8 9 10
1 4 6 5 2 3 7 8 9 10
1 2 3 4 5 6 7 8 9 10
测试输入:
15
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
预期输出:
3 38 5 44 15 36 26 27 2 46 4 19 47 48 50
3 5 38 15 36 26 27 2 44 4 19 46 47 48 50
3 5 15 36 26 27 2 38 4 19 44 46 47 48 50
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50
参考代码
#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}void sort_array(int *arr, int n)
{int i, x, j;for(j = 0; j < n; j ++){for(i = 0; i < n - 1; i ++){if(arr[i] > arr[i + 1]) {x = arr[i];arr[i] = arr[i + 1];arr[i + 1] = x;}}if(j < 3) print_array(arr, n);}print_array(arr, n);
}
第2关:选择排序
任务描述
本关任务:实现选择排序算法,并将乱序数列变成升序。
相关知识
为了完成本关任务,你需要掌握:1.选择排序算法。
选择排序算法
选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
-
算法步骤:
-
初始状态:无序序列为R[0,n−1],长度n,有序区为空;
-
第i=1,..,n−1趟排序从当前无序区R[i−1,n−1]中选出最小的元素R[k],并将它与无序区的第1个记录R[i−1]交换,则R[0,i−1]变为元素个数增加1的新有序区,R[i,n−1]变为元素个数减少1的新无序区;
-
n−1趟选择交换后结束。
-
编程要求
本关的编程任务是补全右侧代码片段sort_array
中Begin
至End
中间的代码,具体要求如下:
- 在
sort_array
中,实现选择排序算法,完成指定输出。
测试说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
10
7 1 4 6 8 9 5 2 3 10
预期输出:
1 7 4 6 8 9 5 2 3 10
1 2 4 6 8 9 5 7 3 10
1 2 3 6 8 9 5 7 4 10
1 2 3 4 5 6 7 8 9 10
测试输入:
15
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
预期输出:
2 44 38 5 47 15 36 26 27 3 46 4 19 50 48
2 3 38 5 47 15 36 26 27 44 46 4 19 50 48
2 3 4 5 47 15 36 26 27 44 46 38 19 50 48
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50
参考代码
#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}void sort_array(int *arr, int n)
{int len = n;int minIndex, temp;for (int i = 0; i < len - 1; i++) {minIndex = i;for (int j = i + 1; j < len; j++) if (arr[j] < arr[minIndex]) minIndex = j;temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;if (i < 3) print_array(arr, n);}print_array(arr, n);
}
第3关:插入排序
任务描述
本关任务:实现插入排序算法,并将乱序数列变成升序。
相关知识
为了完成本关任务,你需要掌握:1.插入排序算法。
插入排序算法
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
-
算法步骤:
-
从第一个元素开始,该元素认为已经被排序;
-
取下一个元素,在已经排序的元素序列中从后向前扫描;
-
如果已排序元素大于新元素,将已排序元素移到下一位置;
-
重复步骤
3
,直到找到已排序的元素小于或者等于新元素的位置; -
将新元素插入到该位置后;
-
重复步骤
2
~5
。
-
编程要求
本关的编程任务是补全右侧代码片段sort_array
中Begin
至End
中间的代码,具体要求如下:
- 在
sort_array
中,实现插入排序算法,完成指定输出。
测试说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
10
7 1 4 6 8 9 5 2 3 10
预期输出:
1 7 4 6 8 9 5 2 3 10
1 4 7 6 8 9 5 2 3 10
1 4 6 7 8 9 5 2 3 10
1 2 3 4 5 6 7 8 9 10
测试输入:
15
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
预期输出:
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
3 38 44 5 47 15 36 26 27 2 46 4 19 50 48
3 5 38 44 47 15 36 26 27 2 46 4 19 50 48
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50
参考代码
#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}void sort_array(int *arr, int n)
{int i, j, temp;for(i = 0; i < n - 1; i ++){temp = arr[i + 1];j = i;while(j > -1 && temp < arr[j])arr[j + 1] = arr[j], j --;arr[j + 1] = temp;if (i < 3) print_array(arr, n);}print_array(arr, n);
}
第4关:希尔排序
任务描述
本关任务:实现希尔排序算法,并将乱序数列变成升序。
相关知识
为了完成本关任务,你需要掌握:1.希尔排序算法。
希尔排序算法
希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素。
-
算法步骤:
-
选择一个增量序列T1,T2,… ,Tk,其中Ti>Tj,Tk=1,i>j;
-
每趟排序,根据对应的增量Ti,将待排序列分割成若干子序列,分别对各子序列进行直接插入排序;
-
按增量序列个数k,对序列进行k趟排序。
-
-
希尔排序实例: 下图的增量序列为:
5
,2
,1
,第一趟排序将增量为5
的子序列进行插入排序,第二趟排序将增量为2
的子序列进行插入排序,第三趟将增量为1
的子序列进行插入排序,最终完成排序。
-
希尔排序的核心在于增量序列的设定:
既可以提前设定好增量序列,也可以动态的定义增量序列。例如序列长度为
n
,则动态增量为:1
,4
,7
,...
,3x+1<n/3
。
编程要求
本关的编程任务是补全右侧代码片段sort_array
中Begin
至End
中间的代码,具体要求如下:
- 在
sort_array
中,使用增量序列[5, 2, 1]
实现希尔排序算法,完成指定输出。
测试说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
8
6 10 5 2 4 9 1 7
预期输出:
6 1 5 2 4 9 10 7
4 1 5 2 6 7 10 9
1 2 4 5 6 7 9 10
1 2 4 5 6 7 9 10
测试输入:
10
7 1 4 6 8 9 5 2 3 10
预期输出:
7 1 2 3 8 9 5 4 6 10
2 1 5 3 6 4 7 9 8 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
参考代码
#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++) {printf(" %d", arr[i]);}printf("\n");
}void sort_array(int *arr, int n)
{int i, j, m = 0;for(int gap = 5; gap > 0; gap /= 2) {for(i = gap; i < n; i++) {int num = arr[i];for(j = i - gap; j >= 0 && arr[j] > num; j -= gap)arr[j + gap] = arr[j];arr[j + gap] = num;}if(m < 3){print_array(arr, n);m ++;}}print_array(arr, n);
}
第5关:归并排序
任务描述
本关任务:实现归并排序算法,并将乱序数列变成升序。
相关知识
为了完成本关任务,你需要掌握:1.归并排序算法。
归并排序算法
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,是采用分治法Divide and Conquer
的一个非常典型的应用。分Divide
:将问题分成一些小的问题然后递归求解;治Conquer
:将分的阶段得到的各答案合并在一起。
-
算法步骤:
-
把长度为n的输入序列分成两个长度为n/2的子序列;
-
对这两个子序列分别采用归并排序;
-
将两个排序好的子序列合并成一个最终的排序序列。
-
编程要求
本关的编程任务是补全右侧代码片段merge_array
和merge_sort
中Begin
至End
中间的代码,具体要求如下:
- 在
merge_array
中,实现两个有序数组arr1
和arr2
合并。 - 在
merge_sort
中,实现归并排序:自上而下的递归方法。
测试说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
10
7 1 4 6 8 9 5 2 3 10
预期输出:
1 2 3 4 5 6 7 8 9 10
测试输入:
15
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
预期输出:
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50
参考代码
#include "sort_.h"void print_array(int *arr, int n)
{if(n==0){printf("ERROR: Array length is ZERO\n");return;}printf("%d", arr[0]);for (int i=1; i<n; i++)printf(" %d", arr[i]);printf("\n");
}int* merge_array(int *arr1, int n1, int* arr2, int n2)
{int* res;res = new int[n1 + n2];int a1 = 0, a2 = 0, index = 0;for (int i = 0; i < n1+n2; i++) if (i < n1) res[i] = arr1[i];else res[i] = arr2[i - n1];sort(res, res + n1 + n2);return res;
}int* merge_sort(int *arr, int n)
{int mid = n / 2;if (mid > 0) {int* arr1 = new int[mid];int n1 = mid, n2 = n - mid;int* arr2 = new int[n2];for (int i = 0; i < n; i++) if (i < mid) arr1[i] = arr[i];else arr2[i - mid] = arr[i];merge_sort(arr1, n1); merge_sort(arr2, n - mid); merge_array(arr1, n1, arr2, n2);}else return merge_array(arr, n, NULL, 0);
}
作者有言
如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……
相关文章:
算法设计与分析——十大经典排序算法一(1--5)
目录 算法设计与分析——十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知名大学生&#x…...
六.慕课的冲击:知识何以有力量?
6.1知识就是力量?【单选题】关于技术进步,以下说法错误的是( )。A、技术进步可以不依靠知识积累B、知识的力量推动技术进步C、技术黑箱换句话说即是天上掉馅饼D、专利保护产生的垄断利润,构成创新动力我的答案:A【判断题】罗伯特索洛认为,技…...
SQL基础
sql基础笔记 DATEDIFF() 函数返回两个日期之间的时间。 DATEDIFF(parameter1,parameter2,parameter3) parameter1:可为 年月日时分秒或周 parameter2,parameter3:合法的日期 如:…...
脏牛复现(CVE2016-5195)
nmap扫描全网段,发现存货主机,ip为192.168.85.141nmap 192.168.85.0/24nmap 扫描端口,发现80端口,访问该网站nmap -p1-65535 192.168.85.141扫描该网站目录,什么也没扫出来 ,dirb扫描目录的字典在usr/share…...
Redis源码---内存友好的数据结构该如何细化设计
目录 前言 内存友好的数据结构 SDS 的内存友好设计 redisObject 结构体与位域定义方法 嵌入式字符串 压缩列表和整数集合的设计 节省内存的数据访问 前言 Redis 是内存数据库,所以,高效使用内存对 Redis 的实现来说非常重要而实际上,R…...
获取 本周、本月、本年 的开始或结束时间
获取 本周、本月、本年 的开始或结束时间 public class DateTimeUtil{// 获取 本周、本月、本年 的开始或结束时间/// <summary>/// 获取开始时间/// </summary>/// <param name"TimeType">Week、Month、Year</param>/// <param name&quo…...
算法训练营 day58 动态规划 判断子序列 不同的子序列
算法训练营 day58 动态规划 判断子序列 不同的子序列 判断子序列 392. 判断子序列 - 力扣(LeetCode) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而…...
优思学院|DFMEA是全球制造业的必修课!
DFMEA(Design Failure Mode and Effects Analysis)是一种分析技术,在产品设计的早期阶段识别和解决潜在的失效问题。它通过分析设计的各个方面,识别潜在的失效模式和影响,并提出相应的改进措施,以减少失效的…...
【Day02数据结构 空间复杂度】
最近太忙了都好久没有更新博客了,太难了,抽空水一篇文章,大佬们多多支持. 上篇:时间复杂度分析 目录 前言 一、空间复杂度概念? 二、实例展示 三、.有复杂度要求的算法题练习 1.题目链接:力扣--消失的数字 2.题目链接:力扣--旋转数组 总结: 1…...
多数据库管理工具哪家强?ChatGPT点评,第一位并不是Navicat
SQL逐渐成为职场必备的编程语言,相信大家都不陌生。SQL是一种结构化查询语言,是用于数据库之间通信的编程语言。每个数据库都有着自己独特的访问规则,但大体上是遵循SQL标准。 因此,辗转于不同的数据库之间,开发者或D…...
UnityShader常用函数(UnityShader内置函数、CG和GLSL内置函数等)
空间变换函数函数名描述float4 UnityWorldToClipPos(float3 pos )把世界坐标空间中某一点pos变换到齐次裁剪空间float4 UnityViewToClipPos(float3 pos )把观察坐标空间中某一点pos变换到齐次裁剪空间float3 UnityObjectToViewPos(float3 pos或float4 pos)模型局部空间坐标系中…...
Springboot自定义注解-1
注解用于修饰其他的注解(纪委:管干部的干部) ① Retention:定义注解的保留策略 Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 Retention(RetentionPolicy.CLASS) …...
经纬度标定及大地坐标系相关概念(一)
经纬度标定及大地坐标系相关概念(一)一、背景二、经纬度的概念三、大地坐标系四、大地坐标系的分类五、各类坐标系介绍5.1 我国地理坐标系5.1.1 北京54坐标系5.1.2 1980西安坐标系5.1.3 2000国家大地坐标系5.2 世界大地坐标系5.1.1 WGS84坐标系5.3 加密坐…...
synchronized关键字原理
synchronized原理 1、基本特点 基于锁策略,可以知道synchronized具有以下特性: 1.开始时候是乐观锁,如果锁冲突频繁就转换为悲观锁 2.开始是轻量级锁,如果锁持有的时间较长,就转换成重量级锁 3.实现轻量级锁的时候…...
面试被问死怎么办?学会这四招,通过的机率提升30%
软件工程师面试很难,难到什么程度呢?有一句话可以来形容: 面试造飞机,上班拧螺丝 没错,面试的时候各种问你原理、机制,而这些在实际工作中却很难用到。于是乎,很多工程师面试的时候就非常害怕…...
Android TV UI开发常用知识
导入依赖 Google官方为Android TV的UI开发提供了一系列的规范组件,在leanback的依赖库中,这里介绍一些常用的组件,使用前需要导入leanback库。 implementation androidx.leanback:leanback:$version常用的页面 这些Fragment有设计好的样式&…...
Xshell 下载及安装
文章目录下载安装连接服务器Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Windows界…...
【LeetCode】剑指 Offer(12)
目录 题目:剑指 Offer 30. 包含min函数的栈 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 30. 包含m…...
vue在history模式下打包部署问题解决
引言 项目使用的模板是element-template,由于业务需要,我将路由的hash模式更改为了history模式,然后在打包部署项目时就出现了问题 个人发现是资源的访问路径有问题,在部署之后发现每次访问的js资源路径前都会自动携带上我路由的…...
Java中常见性能优化策略的总结
文章目录1. 代码优化2. 数据库层面优化SQL调优架构层面的调优连接池调优3. 网络优化4. 缓存缓存分类使用场景选型考虑什么时候更新缓存?如何保障更新的可靠性和实时性?缓存是否会满,缓存满了怎么办?缓存是否允许丢失?丢…...
c++日志库log4cplus使用
项目中需要打印log,方便程序调试和问题定位分析。C实现的log4cplus日志库是一种易于使用的C 日志记录API,可提供线程安全,灵活且任意粒度的日志管理和配置控制。 下面介绍一下在linux中安装log4cplus库过程 下载地址:https://gi…...
什么是接口测试,我们如何实现接口测试?
1. 什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主…...
随机森林在sklearn中的实现
目录 一.集成算法 二.sklearn中的集成算法模块ensemble 三.RandomForestClassifier(随机森林分类器) 四.重要参数 1.基评估器参数 2.随机森林参数 五.重要属性和接口 六.Bagging的另一个必要条件 七.RandomForestRegressor(随机森林回归器) 八.机器学习中调参的基本思…...
[论文总结] 深度学习在农业领域应用论文笔记11
深度学习在农业上的应用笔记11 最近发表的相关论文数量不多,质量普遍也不尽如人意,尤其是《Computers and Electronics in Agriculture》这个期刊。这些论文的方法都很简单,只是强行将深度学习应用于某个问题上,而没有考虑到农业…...
Android 9.0 SystemUI 状态栏屏蔽弹出的悬浮式通知
1.概述 在9.0的系统ROM产品定制化开发中,在systemui的状态栏中,会在有闹钟 wifi连接等特殊弹窗通知的时候,会在接收到系统通知时,弹窗悬浮式弹窗通知,然后过几秒中, 就消失了,所以像这样的悬浮式通知,在有些产品中是不需要的,要求屏蔽掉,这就需要按照悬浮式流程来分析…...
商简智能计划与排程SPS在纺织行业中的应用
企业背景 某织造、染色及后整理一体化工艺的纺织面料企业,主要从事户外功能运动服装、内衣、泳衣、汽车内饰等面料的研发和销售,年产值在20亿左右,是迪卡侬运动面料最优质供应商之一。 纺织行业特点 印染具有典型的流程行业特性,…...
549、RocketMQ详细入门教程系列 -【消息队列之 RocketMQ(三)】 2023.02.28
目录一、Spring 整合 RocketMQ1.1 消息生产者1.2 消息消费者1.3 Spring 配置文件1.4 运行实例程序二、参考链接一、Spring 整合 RocketMQ 不同于 RabbitMQ、ActiveMQ、Kafka 等消息中间件,Spring 社区已经通过多种方式提供了对这些中间件产品集成,例如通…...
如何使用SpringBoot ⽇志?
Spring Boot自定义日志的打印:在一个类中先获取到打印日志对象(日志框架提供的日志对象,而日志框架默认已经集成到Spring Boot里了,springboot默认使用 slf4jlogback);注意:得到日志对象Logger ->来自于slf4j2、使用目志对象提…...
山东大学数字图像处理实验:MATLAB的图像显示方法
文章目录MATLAB 学习实验目的实验原理及方法实验内容MATLAB的图像显示方法实验目的实验内容MATLAB 学习 实验目的 了解 MATLAB 的基本功能及操作方法。掌握典型离散信号的 Matlab 产生和显示。 实验原理及方法 在 MATLAB 中, 序列是用矩阵向量表示, 但它没有包含采样信息, …...
Java缓存面试题——Redis解决方案
文章目录1、什么是缓存击穿?该如何解决2、什么是缓存穿透?该如何解决3、什么是缓存雪崩?该如何解决4、什么是BigKey?该如何解决bigkey的危害发现bigkey解决bigkey5、redis过期策略都有哪些?6、讲一讲Redis缓存的数据一…...
网络营销文案创作思路有哪些/关键词优化排名详细步骤
JAVA中用于取值的语言叫EL表达式。EL为表达式语言(Expression Language),可以简化对变量对象的访问,它的表达式以"${“开始,以”}"结束。EL表达式的操作内容可以是:常量、变量、jsp隐含对象EL表达式提供了对操作内容的运算:属性取值、运算、逻…...
wordpress css导航/无锡网站建设优化公司
return和finally谁先执行 finally是什么呢? finally是用于try-catch-finally捕获异常语句中的代码块,其作用为:在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口…...
建设团队网站/疫情放开最新消息今天
http://blog.flexexamples.com/2007/11/13/removing-the-default-drop-shadow-from-a-linechart-chart-in-flex/转载于:https://www.cnblogs.com/myssh/archive/2010/10/12/1849125.html...
青岛外贸网站制作公司/dw网站制作
问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示: 类型说明ID_Userint自动增长字段,用作该表的主键UserNamevarchar UserDepart表,存放用户所拥有的部…...
简网app工场在线制作/seo sem论坛
能量模型(Energy-based model)是一种以自监督方式执行的生成式模型,近年来受到了很多关注。本文将介绍ScoreGrad:基于连续能量生成模型的多变量概率时间序列预测。如果你对时间序列预测感兴趣,推荐继续阅读本文。 为什…...
做印刷的网站有哪些/抓关键词的方法10条
ubuntu环境:nginxrtmp下载安装搭建下载安装包nginxpcrezlibopensslnginx-rtmp-module安装nginx解压压缩包安装nginx测试nginx复制文件修改nginx的参数rtmp模块http模块下载安装包 nginx Nginx是一款轻量级服务器/反向代理服务器及电子邮件代理服务器,并…...