堆排序的平均时间复杂度为nlogn,效率高(因为有堆这种数据结构以及它奇妙的特征 , 使得"找到数列中最大的数字"这样的操作只需要O(1)的时间复杂度,维护需要logn的时间复杂度),但是实现相对复杂(可以说是这里7种算法中比较难实现的) 。
看起来似乎堆排序与插入排序有些相像,但他们其实是本质不同的算法 。至少,他们的时间复杂度差了一个数量级 , 一个是平方级的,一个是对数级的 。
平均时间复杂度
插入排序 O(n2)
冒泡排序 O(n2)
选择排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
归并排序 O(n log n)
基数排序 O(n)
希尔排序 O(n1.25)
一、术语session
在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的 。
session,中文经常翻译为会话 , 其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session 。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间① 。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义① , 其中的差别只能靠上下文来推断② 。
然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道 , 比如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立 , 但对发信人来说,通信已经开始了 。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱 。这一类的例子有“一个TCP session”或者“一个POP3 session”③ 。
而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④ 。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤ 。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持 , 所以在某种特定语言的语境下 , session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session⑥ 。
鉴于这种混乱已不可改变 , 本文中session一词的运用也会根据上下文有不同的含义,请大家注意分辨 。
在本文中,使用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表达含义⑤,使用具体的“HttpSession”来表达含义⑥
二、HTTP协议与状态保持
HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件 , 无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的 , 好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样 。
推荐阅读
- html5具有那些优势,html5有哪些新特性和优点
- 电脑显卡怎么检查新旧,电脑显卡怎么看新旧
- c语言时间比较的函数 c语言时间比较的函数怎么写
- 表单提价必填的提示jquery,表单提交是什么意思
- 歪歪怎么直播视频号,歪歪如何直播游戏
- php分页获取不同数据库 php通用分页类
- linux筛选文件夹命令,筛选Linux进程的命令
- ppt怎么制作坐标,ppt怎么制作坐标图表
- 母婴科普直播视频素材,母婴直播主题吸引人话题