![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Susceptible0506
这个作者很懒,什么都没留下…
展开
-
二分查找算法
#include <iostream>using namespace std;int binarySearch(int a[], int n, int target){ //在[l,r]区间寻找target int l=0; int r=n-1; while(l<=r) //l=r依旧存在值 { int mid =(l+r)/2; if(a[mid...原创 2020-03-31 15:08:13 · 254 阅读 · 0 评论 -
算法排序之三路快速排序算法
思想:将数组分为三个部分<v、==v、>ve==v:i++e<v:将元素和==v部分的第一个元素交换e>v:将其和gt-1位置的元素交换,为>v块第一个元素操作完成:i==gt将l和lt交换位置#include <iostream>#include <algorithm>#include <...原创 2020-03-27 16:52:38 · 282 阅读 · 0 评论 -
算法排序之双路快速排序
问题:对于一个有着非常多重复数字的数组因为有很多重复数字,会导致partition以v划分出来的数组,有一部分会非常大,那么还是会出现分出来的两个子数组可能一大一小,那么快速排序生成的递归树的平衡度就比归并排序差,并且不能保证深度就是logn,很有可能高于logn,最差就演变成O(n^2)改进:将小于v和大于v的元素分别放在数组的两端i一直往后遍历数据,直...原创 2020-03-27 16:39:30 · 147 阅读 · 0 评论 -
算法排序之快速排序
思想:为当前数找到合适的位置,在这个数之前都是小于这个数的,在这个数之后都是大于这个数的。然后再对前后两部分分别使用快速排序算法的思路进行排序。逐渐递归下去,完成整个排序过程。时间复杂度:O(nlogn)核心在于:如果将指定数移到正确的位置Partition定义:e>v:直接放在>v的后面e<v:将e和>v的第一个元素进行交换位置,j...原创 2020-03-27 16:37:40 · 119 阅读 · 0 评论 -
算法排序之归并排序算法
归并排序时间复杂度:O(nlogn)空间复杂度:O(n)算法思想:将要排序的数组进行不断切分,切分到最后再逐步进行归并操作。将数组不断切分为2份,层数:log n,如果每层的merge操作都是n,时间复杂度就是O(nlogn)。归并过程:开辟一个辅助空间,建立3个索引,一个是当前merge的位置,一个是头一个有序数组操作...原创 2020-03-27 10:56:24 · 143 阅读 · 0 评论 -
算法排序之插入排序算法
插入排序算法时间复杂度:O(n^2)思想:为当前数找到前面合适的插入位置 8 62 315 7 4 6比8小,交换 6 82315 7 4 2比8小,交换 又比6小,又交换 2 6 831 5 7 4 3比6/8小 2 3 6 8...原创 2020-03-27 10:10:45 · 62 阅读 · 0 评论 -
算法排序之选择排序算法
思想:找到当前未排序序列中最小的那个元素,和未排序序列的头一个数字进行交换时间复杂度:O(n^2) 8 6 2 31 5 7 4 1最小,和8交换 16 23 8 5 7 4 2最小,和6交换 1 26 38 5 7 4 3最小,和6交换 1 2 3...原创 2020-03-27 09:31:48 · 68 阅读 · 0 评论 -
算法时间复杂度分析(3)
均摊时间复杂度分析实现一个vector:动态vector:不能因为push_back函数调用了resize函数,就认为他是O(n)复杂度,其实他是O(1)的复杂度。从添加1-n+1个数字,总的操作数是2n,平摊到每次,大概是2,所以复杂度是O(1)因为resize不是每一次都调用的,所以可以用均摊时间复杂度分析避免复杂度的震荡删除元素的时...原创 2020-03-23 20:29:12 · 211 阅读 · 0 评论 -
算法时间复杂度分析(2)
常见的复杂度分析没有数据规模的变化存在一个循环,循环的次数和n相关Cn次,可能c不是大于1的数存在一个双重循环,都与n有关反例:分析循环复杂度的时候,我们要看循环的起始点,终始点,最关键的是每次增量的变化:验证自己程序复杂度的方法方式1:可以在这个基础上降一个数量级,比如程序在1s内可以执行1000规模内的数据,大致是...原创 2020-03-23 20:25:57 · 274 阅读 · 0 评论 -
算法时间复杂度分析(1)
复杂度分析简介常数项不计入复杂度当数据规模小的时候,可以考虑复杂度比较差的算法但是当规模比较大时,我们就必须追求复杂度时间复杂度如果由两部分组成,选取大的那部分但是要注意两部分的n是否相同,n不同时间复杂度由两部分组成:数据规模复杂度:O(n)数据规模每上升10倍,时间增加十倍...原创 2020-03-23 20:14:28 · 1745 阅读 · 0 评论