算法导论笔记
算法导论,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 · 132 阅读 · 0 评论 -
2.1插入排序
算法思想:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止(点击此处查看)。特征:简单直观且稳定,算法适用于少量数据的排序,时间复杂度为O(n^2)实现代码如下:#include <iostream>#include <vector>using namespace std;//容器需要引用传递才能改变里面的...原创 2019-09-20 14:57:50 · 137 阅读 · 0 评论 -
2.3.1 分治法(归并排序)
分治法模式:分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。解决这些子问题,递归地求解各子问题。然而,若子问题的规模足够小,则直接求解。合并这些子问题的解成原问题的解。对于归并排序:分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。解决:使用归并排序递归地排序两个子序列。合并:合并两个已排序的子序列。算法特征:时间复杂度为O(nlgn),不稳定排序。#...原创 2019-09-22 16:54:50 · 248 阅读 · 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 · 248 阅读 · 0 评论 -
6.4堆排序
算法思想: 建立堆(建立过程中时刻维护堆,使其每个子树(堆可看作一个二叉树)都满足堆的定义),堆的根节点值最大,可获得该根节点并删去,将剩下的结点继续调整为堆,依次操作,每次都能获得当前最大元素,最后即为排序结果。时间复杂度:O(nlgn);空间复杂度:O(1)(因为可以将每次获得结果直接存储到当前数组里,因此没必要在额外的开辟空间)代码实现:#include <iostream>...原创 2019-10-02 16:25:21 · 210 阅读 · 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 · 820 阅读 · 0 评论
分享