![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论
梦李寻欢
纸上得来终觉浅,绝知此事要躬行.
展开
-
红黑树
GitHub红黑树是一棵特殊的二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似于平衡的。一棵红黑树是满足下面红黑性质的二叉搜索树:每个结点或是红色的,或是黑色的 根节点是黑色的 每个叶节点(NIL)是黑色的 如果一个结点是红色的,则它的两个子结点都是黑色的 对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点Re原创 2021-04-06 18:27:11 · 108 阅读 · 0 评论 -
二叉搜索树
二叉搜索树是以一棵二叉树来组织的,这样一棵树可以用一个链表数据结构来表示,其中每个结点就是一个对象。二叉搜索树种的关键字总是以满足二叉搜索树的性质的方式来存储,一个结点的左子树中任意结点的键值不大于该结点的键值,且其右子树中任意结点树键值不小于该结点的键值。如果按照中序遍历的方式输出一棵二叉搜索树的键值,所得到的是一个有序排列的队列。BinarySearchTree.h#pragma oncestruct BinarySearchTreeNode{ BinarySearchTre原创 2021-04-06 17:50:58 · 102 阅读 · 0 评论 -
快速排序
GitHub快速排序也是使用了分治策略(递归),每一次遍历时将队列分为三部分:基准元素 不大于基准元素的部分 大于基准元素的部分对于不大于基准元素的部分和大于基准元素的部分,再次排序过程正好是整个排序的一个子过程。如果每次选择的基准元素使得剩余部分都分部在基准元素的单侧,则是快速排序性能的最坏情况,时间复杂度为 。如果每次选择的基准元素使得剩余部分元素均衡的分布在基准元素两侧,则是快速排序性能最好的情况,时间复杂度为。快速排序的平均运行时间更接近于最好的情况,而非最坏的情况,而且其原创 2021-03-25 18:44:41 · 78 阅读 · 0 评论 -
堆排序与优先队列
堆排序是通过构建最大(小)堆,来找出队列中的最大(小)值,每次构建找出一个最大(小)值,将其排除后,对队列剩余成员再次构建最大(小)堆,则能依次找出队列中的最大(小)值。构建堆的过程时间复杂度为O(lgn),整个排序的时间复杂度为O(nlgn)。优先队列是用来维护一组元素构成的集合的数据结构,可以加进行插入、提取最大(小)值等操作。HeapifySort.h#pragma onceint Parent(int i);int Left(int i);int Right(int .原创 2021-03-25 16:41:35 · 144 阅读 · 0 评论 -
矩阵类设计
用C++类封装了一个矩阵的类,实现了加、减和乘法的运算符重载,同时复习了一遍拷贝、移动等构造函数和赋值运算符的重载。Matrix.h#pragma once#include <stdio.h>#include <iostream>template<typename T>class Matrix{public: Matrix() { Row = Column = 0; Item = nullptr; } Matrix(int row,原创 2021-03-24 15:34:34 · 1888 阅读 · 0 评论 -
最大子数组问题
GitHub问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素)。分治策略求解方法:假定要寻找数组A[low, high)的最大子数组。将数组拆分为 两个子数组 A[low, mid), A[mid, high),那么A[low, high) 的任何连续子数组 A[i,j) 必然是以下三种情况之一:完全位于子数组 A[low, mid)中,因此 low <= i <= j <mid 完全位于子数组A[mid, high)..原创 2021-03-23 13:53:14 · 91 阅读 · 0 评论 -
归并排序
归并排序的思想是将排序队列拆分为子队列,对排好序的子队列进行合并。子队列的排序过程跟父队列排序是相同的问题,因此可以通过递归调用解决。当子队列拆分到长度等于1时,自然就是已排好序的队列。python代码:#coding:utf-8import sysdef MergeSort(A, start, end): if end - start > 1: mid = int((start + end)/2) MergeSort(A, start,.原创 2021-03-22 16:01:38 · 92 阅读 · 0 评论 -
插入排序
插入排序用打扑克牌时,摸牌过程的排序来形容比较像:左手维护一个已排序的序列,右手每次摸一张牌,与左手的牌从后向前进行比较,将这张牌插入到合适的位置,重复该动作直至牌堆的牌被摸完为止。python代码:def InsertionSort(A): for j in range(1, len(A)): key = A[j] i = j - 1 while i >= 0 and A[i] > key: A.原创 2021-03-19 19:01:03 · 91 阅读 · 0 评论