![](https://img-blog.csdnimg.cn/20190919141524214.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法导论笔记
算法导论,C++实现
vs974532452
这个作者很懒,什么都没留下…
展开
-
12 二叉搜索树的操作
#include <iostream> #include <vector> using namespace std; typedef struct Tree { int key; Tree *left; Tree *right; Tree *parent; }Tree; //必须对root为引用或者指向指针操作,涉及到改变root本身地址问题 void Tre...原创 2019-10-15 14:21:20 · 97 阅读 · 0 评论 -
2.1插入排序
算法思想:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止(点击此处查看)。 特征:简单直观且稳定,算法适用于少量数据的排序,时间复杂度为O(n^2) 实现代码如下: #include <iostream> #include <vector> using namespace std; //容器需要引用传递才能改变里面的...原创 2019-09-20 14:57:50 · 102 阅读 · 0 评论 -
2.3.1 分治法(归并排序)
分治法模式: 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。 解决这些子问题,递归地求解各子问题。然而,若子问题的规模足够小,则直接求解。 合并这些子问题的解成原问题的解。 对于归并排序: 分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。 解决:使用归并排序递归地排序两个子序列。 合并:合并两个已排序的子序列。 算法特征: 时间复杂度为O(nlgn),不稳定排序。 #...原创 2019-09-22 16:54:50 · 183 阅读 · 0 评论 -
4.1 分治法(最大子数组)
A[low…high]的任何连续子数组A[i…j]所处的位置必然是以下三种情况之一: 完全位于子数组A[low…mid]中, low <=i<=j<=mid. 完全位于子数组A[mid+1…high].mid<i<=j<=high 跨越了中点,low<=i<=mid<j<=high. 时间复杂度 O(nlgn) + O(n),其中O(n...原创 2019-09-23 22:32:08 · 197 阅读 · 0 评论 -
6.4堆排序
算法思想: 建立堆(建立过程中时刻维护堆,使其每个子树(堆可看作一个二叉树)都满足堆的定义),堆的根节点值最大,可获得该根节点并删去,将剩下的结点继续调整为堆,依次操作,每次都能获得当前最大元素,最后即为排序结果。 时间复杂度:O(nlgn);空间复杂度:O(1)(因为可以将每次获得结果直接存储到当前数组里,因此没必要在额外的开辟空间) 代码实现: #include <iostream>...原创 2019-10-02 16:25:21 · 153 阅读 · 0 评论 -
7.1 快速排序
算法思想:通过递归将待排序元素分为小于主元元素和大于主元元素两部分。元素都满足主元前的所有元素小于(大于)主元后的元素。 算法特征:期望时间复杂度O(nlgn),最坏情况时间复杂度为O(n^2)(子问题划分为n-1个元素和0个元素) 代码如下: #include <iostream> #include <vector> using namespace std; int ...原创 2019-10-06 17:11:55 · 754 阅读 · 0 评论