快速排序
快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个队列过一遍筛选,以保证其左边的元素都不大于它,其右边的元素都不小与它
function quickSort($arr){ // 获取数组长度 $length = count($arr); // 判断长度是否需要继续二分比较 if($length <= 1){ return $arr; } // 定义基准元素 $base = $arr[0]; // 定义两个空数组,用于存放和基准元素的比较后的结果 $left = []; $right = []; // 遍历数组 for ($i=1; $i < $length; $i++) { // 和基准元素作比较 if ($arr[$i] > $base) { $right[] = $arr[$i]; }else { $left[] = $arr[$i]; } } // 然后递归分别处理left和right $left = quickSort($left); $right = quickSort($right); // 合并 return array_merge($left,[$base],$right); }
冒泡排序
思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数
比如:2,4,1
第一次冒出4:2,1,4
第二次冒出2:1,2,4
function bubbleSort($arr){ // 获取数组长度 $length = count($arr); // 第一层循环控制冒泡轮次 for ($i=0; $i < $length-1; $i++) { // 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数 for ($k=0; $k < $length-$i-1; $k++) { if($arr[$k] > $arr[$k+1]){ $tmp = $arr[$k+1]; $arr[$k+1] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; }
选择排序
思路:每次选择一个相应的元素,然后将其放到指定的位置
function selectSort($arr){ // 实现思路 // 双重循环完成,外层控制轮数,当前的最小值,内层控制比较次数 // 获取长度 $length = count($arr); for ($i=0; $i < $length - 1; $i++) { // 假设最小值的位置 $p = $i; // 使用假设的最小值和其他值比较,找到当前的最小值 for ($j=$i+1; $j < $length; $j++) { // $arr[$p] 是已知的当前最小值 // 判断当前循环值和已知最小值的比较,当发下更小的值时记录下键,并进行下一次比较 if ($arr[$p] > $arr[$j]) { $p = $j; // 比假设的值更小 } } // 通过内部for循环找到了当前最小值的key,并保存在$p中 // 判断 日光当前$p 中的键和假设的最小值的键不一致增将其互换 if ($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } // 返回最终结果 return $arr; }
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,完成三次握手,客户端与服务器开始传送数据。
简单点说:A与B建立TCP连接时,首先A向B发送SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)就完成了。
TCP三次握手
所谓三次握手,是指简历一个TCP连接时需要客户端和服务器总共发送三个包
三次握手的目的是连接服务器指定端口,简历TCP连接,并同步连接双方的序列号并交换TCP窗口大小信息。
TCP三次握手图解:
简单解释TCP三次握手:
参考:https://github.com/jawil/blog...
四次挥手
TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作。
由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
TCP在真正的读写操作之前,server和client之间必须建立一个连接,当读写操作完成后,双方不再需要这个链接时他们可能释放这个连接,连接的建立是通过三次握手,释放则需要四次挥手,所以说每个连接的建立都是需要消耗资源和时间的。
TCP短连接
所以短连接一般只会在client和server间传递一次读写操作,短连接管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段
长连接
长/短连接的操作过程
长/短连接的优缺点
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!