我在学习数据结构内排序。书上有句话是这样说的:“事实上,快速排序在n(指的待排序数组的长度)很小时是很慢的!”,“一个简单的改进是用能较快处理较小数组的方法来代替快速排序,如插入排序和选择排序”。我现在想要问的是:
(1)为什么快速排序在n很小时会很慢?
(2)插入排序和选择排序就很快吗?快速排序平均时间复杂度是nlogn,而插入排序和选择排序是n^2.那怎么会更快呢?
希望大侠们解我迷团!我用的教材是电子工业出版社的《数据结构与算法分析(C++版)》,Clifford A.Shaffer著!
(1)为什么快速排序在n很小时会很慢?
(2)插入排序和选择排序就很快吗?快速排序平均时间复杂度是nlogn,而插入排序和选择排序是n^2.那怎么会更快呢?
希望大侠们解我迷团!我用的教材是电子工业出版社的《数据结构与算法分析(C++版)》,Clifford A.Shaffer著!
解决方案 »
- CDialog派生类,DoModal后OnOK或OnCencel出现断言错误 ASSERT(::IsWindow(m_hWnd));
- smtp邮箱验证有问题啊(准确性很随机)
- 一个ADO的查询语句的问题!涉及多表查询,表字段相同,需要TO_DATE转换,的一个语句。
- 请问如何在CEditView中显示字符串?
- 鼠标事件,100分相送
- 关于动画图标
- 一个关于LBUTTONDOWN和LBUTTONUP的消息处理的问题
- 对话框问题,寻大神帮忙。
- CAnimateCtrl::Open打不开.avi文件,可能因为啥?
- 帮忙
- SYS驱动程序 ZwQueryInformationFile 如何得到文件盘符?
- 有源代码了,如何生成控件啊?
可以理解为插入排序
T1 = c1 * n * n
归并排序,堆排序等亚2次排序(快排的平均时间也是这个界)
T2 = c2 * n * log(n)其中c1和c2是与n无关的常数,他们其实代表排序的每个迭代步骤中需要执行的操作数量
显然,c1 < c2
所以,存在一个n使T1 = T2即
c1 * n * n = c2 * n * log(n)
得到:
log(n) / n = (c1 / c2)