摘要: 分治思想求解的问题,但是比较特殊,只有分解问题和求解小问题,不需要合并 每次也只需要经过判断,分解一半,所以比其他分解两边的效率高 最坏情况时间复杂度为O(n^2),期望时间复杂度为O(n) 找基准值时候可以考虑随机选择 #include<iostream> #include<vector> #in 阅读全文
posted @ 2020-11-25 21:48 不妨不妨,来日方长 阅读(734) 评论(0) 推荐(0) 编辑
摘要: 性能分析: 时间复杂度:O(n*log(n)) 空间复杂度:O(log(n)) 这里的时间复杂度其实是快速排序最好的时间复杂度,最坏的时间复杂度是O(n^2) 代码里补充的随机化快速排序的期望时间复杂度为:O(n*log(n)) 快速排序的性能优于归并排序是因为常数项,即算法所需的固定时间量。 #i 阅读全文
posted @ 2020-11-25 18:20 不妨不妨,来日方长 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 还是分治的思想,解决方法利用了归并排序。具体可以看一下这篇博客。 第三章:分治II - 不妨不妨,来日方长 - 博客园 (cnblogs.com) C++代码如下,可以在VS直接运行。 #include<iostream> #include<vector> #include<algorithm> u 阅读全文
posted @ 2020-11-25 16:46 不妨不妨,来日方长 阅读(694) 评论(0) 推荐(0) 编辑
摘要: 3.1逆序对计数问题 合并这个步骤是比较难的,也会区别于“最大数组问题”的地方。 归并排序的过程正好可以顺便统计逆序对,所以将统计逆序对嵌入到归并排序的算法当中。 所以合并的算法复杂度就降到了归并排序的O(n)。 3.2快速排序 归并排序:分的过程,1/2切开,所以这部分没有话费多少时间,即简化分解 阅读全文
posted @ 2020-11-25 16:42 不妨不妨,来日方长 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 性能分析: 时间复杂度:O(n^2) 空间复杂度:O(1) 虽然性能跟冒泡排序一样,但是速度上来讲,选择排序要优于冒泡排序,因为减少了数据交换的次数,先找到了最小值的下标,然后将它往前挪。 #include<iostream> #include<vector> using namespace std 阅读全文
posted @ 2020-11-25 11:28 不妨不妨,来日方长 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 性能分析: 时间复杂度:O(n^2) 空间复杂度:O(1) #include<iostream> #include<vector> using namespace std; int main() { // 思想: // 在原始待排序序列上操作; // 将原始待排序序列分成无序区和有序区两部分; // 阅读全文
posted @ 2020-11-25 10:59 不妨不妨,来日方长 阅读(203) 评论(0) 推荐(0) 编辑