## 一、尝试 先来看一道题: > 如果 a+b+c = 1000, 且 a^2 + b^2= c^2 (a,b,c为自然数),如何求出 a、b、c可能的合并? 一般采取最原始的方法(枚举法),将 a、b、c分别从0~1000取值,再逐一匹配。 ```python import time start · · · · · · · ·
在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录他们传进传出函数等。一组数据中包含的元素个数可能发生变化。 对于这种需求,最简单的解决方案就是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数 · · · · · · · ·
## 1、顺序表的基本表现形式 是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节 · · · · · · · ·
## 1、栈 栈(stack),有些地方成为堆栈,是一种容器,可存入数据元素,访问元素,删除元素,他的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(top)和输出数据(pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默 · · · · · · · ·
## 1、冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完后才能。这个算法的名字又来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 · · · · · · · ·
选择排序(Selecion sort)是一种简单直观的排序算法。他的工作原理如下 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个 · · · · · · · ·
插入排序(Insertion Sort)是一种简单直观的排序算法。他的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 ## 1、插入排序分析 ![在这里插入图片 · · · · · · · ·
快速排序(Quicksort),又称 划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割为独立的两部分。其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,一次达到整个数据变成有序序列。 · · · · · · · ·
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,值直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分为一组,算法终止 · · · · · · · ·
归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 将数组分解最小后,然后合并两个有序数组,基本思路就是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。 ## 1、归并排 · · · · · · · ·
## 1、排序算法 排序算法(Sorting algorithm) 是一种能将一串数据依照特定顺序进行排列的一种算法。 ## 2、排序算法的稳定性 **稳定性**: 稳定排序算法会让原本有相等键值的记录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的记录 R 和 S ,且在原本的列表 · · · · · · · ·
## 1、搜索 搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真或假,因为该项目是否存在。搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找。 ## 2、二分法查找 二分法查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;缺点是要求待查表为有序表,且插入删除 · · · · · · · ·
## 1、基本概念 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) ## 2、性质(特性) - **性质1**:在二叉树的第 i 层上至多有 2(i-1)个节点(i > 0) - **性质2**:深度为 k 的二 · · · · · · · ·
## 1、树的概念 树(tree)是一种抽象数据类型(ADT)或是这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。他是由 n (n>=1)个有限节点组成一个具有层次关系的集合。把他叫做“树”是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: - 每个节点 · · · · · · · ·
## 0、算法概述 ### 0.1 算法分类 十种常见排序算法可以分为两大类: **比较类排序**:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 **非比较类排序**:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以 · · · · · · · ·