![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
阙建明
这个作者很懒,什么都没留下…
展开
-
算法分析与复杂性理论
1. 函数渐进的界1.1 大 OOO 符号定义:设 fff 和 ggg 是定义域为自然数集N上的函数。若存在正数 ccc 和 n0n_0n0 ,使得对于一切 n>n0n > n_0n>n0 有 0≤f(n)≤cg(n)0 \le f (n) \le cg(n)0≤f(n)≤cg(n) 成立,则称 f(n)f (n)f(n) 的渐进上界是 g(n)g(n)g(n),记作:f(n)=O(g(n))f (n) = O(g(n))f(n)=O(g(n))自然数:自然数是指用以计原创 2020-06-24 23:05:58 · 1011 阅读 · 0 评论 -
归并排序
主要思想:将序列分成两部分;对两部分分别递归调用归并排序进行排序;然后对各自有序的两部分进行归并:使用 leftHalf 和 rightHalf 分别存储两个有序的子序列;然后依次对比两个子序列,将其合并到原序列当中成为一个整体的有序序列;def mergeSort(A): def merge(A, l, m, r): leftHalf, rightHalf, i, j, k = A[l: m + 1], A[m + 1: r + 1], 0, 0, l原创 2020-06-24 23:05:22 · 137 阅读 · 0 评论 -
快速排序
主要思想:从序列中取出一个数作为基准数(pivot);接着将序列中所有比基准数大的放在基准数的右边,把所有小于等于基准数的放在左边,具体流程如下:假设序列A的长度为n,我们选第一个数未基准数(基准数的选择有很多方式,简单起见,每次都选择序列的第一个数作为基准数)用两个指针,left 指向序列的第一个数,right 指向序列的最后一个元素;使用right指针从右往左找到第一个小于pivot的数,使用left指针从左往右找到第一个大于pivot的数;就交换两个指针所指的数,重复上述过程,直到le原创 2020-06-24 23:04:29 · 173 阅读 · 0 评论 -
插入排序
主要思想:每轮 从未排序部分取一个元素插入到已经排序好的队列中,保证新的元素插入之后的新队列依旧是有序的。3.1 简单演示白色背景表示未排序部分灰色背景表示已排序部分砖红色背景指示其是本轮待插入的目标元素淡黄色背景指示目标元素此次要对比的元素(淡换色背景的元素是上一轮排序的元素)初始状态初始状态有n=7个元素,初始时,第一个元素属于已经排好序的元素,所以 第一轮需要将第二个元素插入到一排序的序列;第一轮第二轮第三轮第四轮第五轮原创 2020-06-24 23:03:47 · 139 阅读 · 0 评论 -
选择排序
主要思想:每轮依次 从未排序部分选出一个最小的元素放置于未排序序列的第一个位置。注意:PPT中没有统一,其实现刚好是反过来的,它每轮依次 从未排序部分选出一个最大的元素放置于未排序序列的最后一个位置PPT中选择排序反向实现,插入排序又正向实现,这边统一都改成正向实现,比较好对比2.1 简单演示白色背景表示未排序部分灰色背景表示已排序部分淡绿色指示下一个放置本轮最小元素的位置淡黄色指示本轮最小元素初始状态初始状态有n=7个元素,所以 第一轮需要从n个元素选出原创 2020-06-24 23:03:29 · 185 阅读 · 0 评论 -
冒泡排序
主要思想:每轮依次 从前往后 比较相邻的两个元素,将两个元素中 较大的排在后面 , 每一轮 可以将当前 未排序部分最大的置于最后。(每轮通过冒泡的方式将当前未排序部分最大的元素冒出)提示:有每轮将最大的冒出这种方式冒泡,自然有每轮将最小的冒出到头部这种方式,这边所说的冒泡指的是前者(PPT里面说的也是前者啦)1.1 简单演示白色背景表示未排序部分灰色背景表示已排序部分淡蓝色表示正在进行对比交换的两个元素初始状态初始状态有n=7个元素,所以 第一轮需要对n个元素进行n-1次原创 2020-06-24 23:02:34 · 199 阅读 · 0 评论