排序的最好和最坏的时间复杂度问题
来源:互联网 发布:淘宝自然堂是正品吗 编辑:程序博客网 时间:2024/05/21 09:36
排序时间复杂度问题
面试时被问到冒泡排序,选择排序和快速排序的时间复杂度问题,由于自己基础不扎实,当场懵逼,这件事一直让我反思了好几天。
可能你会正确地写出这几种排序,可能你会背过别人给你说的时间复杂度。我也是这样。
先说冒泡排序:
冒泡排序不管序列是怎样,都是要比较n(n-1)/2 次的,O(N2),
而对于交换次数来说,如果是数组是有序的则,只不需要交换。如果数组是逆序的则需要交换n(n-1)/2次,平均来说数组要交换O(N2/4)
所以时间复杂度最好和最坏都是O(N2)
选择排序是冒泡排序的改进
同样选择排序无论序列是怎样的都是要比较n(n-1)/2次的,这是比较次数
而对于交换次数来说:如果数组有序则不需要交换,如果逆序则要交换n次
总得来说,时间复杂度最好和最坏都是O(N2)
插入排序不同
如果序列是完全有序的,插入排序只要比较n次,无需移动时间复杂度为O(N)
如果序列是逆序的,插入排序要比较O(N2)和移动O(N2)
总得来说,时间复杂度最好的情况是O(N),最差的情况是O(N2)
快速排序
快速排序的时间复杂度最好是O(nlogn),平均也是O(nlogn),这种情况是轴枢恰好能把两侧的分开。
时间复杂度最差是O(N2),最差的情况选择的轴枢在数组最左侧或是最右侧
阅读全文
1 0
- 排序的最好和最坏的时间复杂度问题
- 排序的最好和最坏的时间复杂度问题
- 常见排序的最好,平均以及最坏时间复杂度
- 几种排序在最坏和最好情况下的时间复杂度
- 传输速率的比较 快排的最好和最坏的时间复杂度比较 递归深度的问题 ackerman函数
- 各排序算法最好最坏平均情况下的时间复杂度
- 关于快速排序和插入排序最坏时间复杂度为O(nlogn)的算法
- 各种排序算法的最好最坏情况
- 各种排序最好最坏的比较次数
- 快速排序最好,最坏,平均复杂度分析
- 快速排序最好,最坏,平均复杂度分析
- 堆排序的最坏运行时间和最优运行时间
- 最坏情况下保证时间复杂度为N*logN的快速排序
- 归并排序(时间复杂度O(nlgn)(最坏))
- 算法的时间复杂度和空间负责度、最坏情况和平均情况
- 快速排序最坏情况下lgn的空间复杂度
- 排序的时间复杂度
- 最坏的iOS 7和最好的iOS 7
- Handle/Body pattern(Wrapper pattern)
- 头文件在.c/.cpp中引用和.h文件引用
- 高斯消元模板
- POJ
- 设计模式之单例模式
- 排序的最好和最坏的时间复杂度问题
- GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
- Linux常用基本命令
- 面向对象六大原则解析
- 慕课笔记--[课程]webpack深入与实战
- Java clone方法浅析
- Vincent-Starry, Starry Night
- mysql 5.6.35--libc.so.6(GLIBC_2.14)(64bit),libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
- Bluetooth MESH探究 --- (10) BLE MESH与Zigbee关键参数对比