算法
蠢豆包
湖南人文科技学院
展开
-
计数排序
/*其主要是将1同样大小的数据放在一起,然后在分开*/#include <iostream> using namespace std;int SUM(int a[],int n){//此函数为找到该数组最大值,作用为,开辟这么大的空间以防浪费 int max; max=a[0]; for(int i=1;i<n;i++) { ...原创 2020-01-16 21:53:30 · 142 阅读 · 0 评论 -
归并排序
/*时间复杂度O(nlog2n) 空间复杂度O(n)将其分成两组前一部分a 和后一半b,设置一个空数组记录,逐个比较数组大小,小的放入记录数组,利用分治思想逐步分解计算*/#include <iostream> using namespace std;void paixu(int att[],int ak,int aj){ if(ak...原创 2020-01-16 21:44:23 · 120 阅读 · 0 评论 -
希尔排序
其主要是在不同增量的情况下使用插入排序/*时间复杂度O(n^1.3) 空间复杂度O(1)希尔排序是在,插入排序的基础上进行的改进,插入排序适合小规模数据或者基本有序的数据,希尔排序可用于数据顺序较乱的数据基本思想,先将数组分成两个两个一组组内进行插入排序,分组方式为第i个数据和i+size(数组长度)/2然后4个数4个数一组,组内插入排序。分组方式为i个数和...原创 2020-01-12 13:31:39 · 121 阅读 · 0 评论 -
动态规划,西瓜分堆问题
/*lijingjing将西瓜分成两份,求其最小差值,其极致情况为两组数据相等,差值最小为0当不是极值状态时,其最小差值的两组一定是最接近总和的一半的两个数所以,同01背包问题。q求组成总和一半数的最大情况*/#include<iostream>using namespace std;int n,a[14];int b[14],c[14];int j=0,k=0;...原创 2019-12-13 13:56:52 · 1016 阅读 · 0 评论 -
动态规划 带限制的排队问题
/*lijingjig带限制的排队购票问题*/#include<iostream>using namespace std;long f(int j,int i){ long y; if(i==0 && j<8) y=1; else{ if(j==4 && i==1 || j=3 &&...原创 2019-12-13 10:40:55 · 769 阅读 · 0 评论 -
动态规划 0 1背包问题
/*lijingjing将物品放入背包中的几种可能1、当物品容量大于该背包容量,则不方入背包,则比较下一个物品 z<w[i]2、当该物品容量小于该背包容量,分为2种情况 2.1、将物品放在背包里,sum=SUM(i+1,z-w[i])+p[i]; 2.2、不吧该物品放在背包里(因为可能出现后面的物品放入背包产生的效益更高)sum=SUM(i+1,z)*/...原创 2019-12-13 10:39:47 · 124 阅读 · 0 评论 -
快速排序
/*lijingjing快速排序它的平均时间复杂度为O(NlogN)主要思想为,分治定义第一个数为基数,使其左面小于基数,右面大于基数,在分别在其左面和右面重复上述过程*/#include<iostream>using namespace std;int a[10]={1,3,5,7,9,2,4,6,8,10};void Point(int left, int righ...原创 2019-12-07 20:43:30 · 112 阅读 · 0 评论 -
堆排序
/*lijingjing堆排序复杂度nlgn利用二差数性质,将大的数放在跟节点比较是从最后一个根节点,往前推交换是从该节点到最后一个节点往下推*/#include<iostream>using namespace std;//大数做跟节点void Sum(int c[],int a,int end)//a为开始位置 end为结束位置{ int l = 2 * a...原创 2019-12-07 18:51:26 · 100 阅读 · 0 评论 -
插入排序
/*lijingjing插入排序,从小到大1、取出第二个数,和第一个数比较,小的放在前面2、取出第三个数,比较第二个数,大于放在第三位,小于和第一个数比较没次都是从后往前扫描3、重复*/#include<iostream>using namespace std;int main(){ int A[10]={1,3,5,7,9,2,4,6,8,10}; int i...原创 2019-12-07 09:46:18 · 114 阅读 · 0 评论 -
多项旋转方阵
/*lijingjing其递归的是圈/层。利用层数为0来规定递归结束*/#include <iostream> using namespace std;int a[100][100];void sum(int b,int s,int t)//开始位置 层数 赋值数{ int j; int h=b,v=b; if(s==0) return; ...原创 2019-12-06 22:28:07 · 118 阅读 · 0 评论 -
分治 排队购票问题
/*lijingjing分为3中情况1、当没有人拿100元时 只有一种方法2、当拿50的人数小于拿100的人数为03、当有若干人且拿50》100则可分,最后一个拿100,那么前m+n-1个中有m-1个100和n个50 最后一个拿50 ,那么前m+n-1个中有m个100和n-1个50*/#include<iostrea...原创 2019-12-04 11:21:57 · 365 阅读 · 0 评论 -
分治 递归 汉诺塔问题
/*lijingjing利用分治思想将问题分到最小模块即,1个盘时只需A->C单位为2块,A->B A->C B->C所以将所有盘分成最大盘和其余盘两个盘n和n-1两盘先将n-1盘借助C移动到B盘上即(A,B,C) A->B然后将n盘移动到C上面 A->C借助A将n-1盘移动到C盘(B,A,C) B->C...原创 2019-12-04 10:29:54 · 109 阅读 · 0 评论 -
分治 棋盘覆盖问题
`/*分治,到最小可能事件,当只有4个方块时,除唯一的黑色方块外的另3个方块构成一组梯形分治思想,将方阵分成4部分,判断黑色方块位置,4部分中不包含黑色方块的3个方块链接处组成一组梯形在针对分成的4部分在继续分治,直到最小的出现//注意,其中二维矩阵的左上角表示该方块位置*/#include#include<math.h>using namespace std;i...原创 2019-12-03 13:27:35 · 227 阅读 · 0 评论