数据结构与算法OJ
文章平均质量分 54
Cairo Dai
这个作者很懒,什么都没留下…
展开
-
深度优先搜索(DFS)与广度优先搜索(BFS)
深度优先搜索与广度优先搜索,都是图形搜索算法,存在相似之处却又不同。深度优先搜索(Depth First Search) 深度优先搜索,重点在深,简要来说就是对于每一个可能的分支路径都尽可能深入,深入到不能再深入为止,且每个节点只能访问一次。一般用堆数据结构来辅助实现DFS算法。 思想: 递归。假设初始状态下图中所有顶点均未被访问,则我们从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径...原创 2021-09-24 20:50:41 · 134 阅读 · 0 评论 -
归并排序(思想及代码实现)
基本思想:归并排序也是一类高效的基于比较的排序算法,是分治思想的典型应用。它的工作原理是首先将未排序序列分成n份元素个数为1的子序列(个数为1被认为是有序的),然后进行合并,最后子序列数为1即已排序序列。归并排序是时间复杂度为次平方中唯一的稳定的排序算法。基本步骤:将原始序列分成n份,每份元素个数为1。 反复进行有序序列的合并,直到最后子序列数为1。代码实现:void Merge(int arr[], int low, int mid, int high, int &ans[])原创 2020-09-11 15:49:42 · 331 阅读 · 0 评论 -
交换排序(思想及代码实现)
交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列前端移动。1.快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据要比另外一部分的所有数据都要小,然后再按照该方法对两部分的数据序列分别再进行快排。所以整个排序过程可以递归进行,以此达到整个数据均变为有序序列。基本步骤:将最左侧的元素作为‘枢轴’放入“哨所”。 设置low和high分别指向数组两端。 high向左移动,一旦遇到比哨所元素小的元素就将其移入左边的low位置。 low向右原创 2020-09-11 15:42:48 · 882 阅读 · 0 评论 -
选择排序(思想及代码实现)
1.简单选择排序基本思想:每次都从未排序的序列中选择一个最小的数放在已排序列的最左边,直至排序完成。void SelectSort(int list[], int len){ for(int i=1; i<len; i++){ int temp=i; for(int j=i+1; j<len; j++){ if(list[j]<list[temp]) temp=j; }原创 2020-09-10 11:42:11 · 1126 阅读 · 0 评论 -
插入排序(思想及代码实现)
1.直接插入排序基本思想:每次选择待排序序列中的第一条记录,根据其值大小将其插入到已排序的有序序列当中,直至所有记录全部排序完毕。void DirectInsertSort(int *list, int len){ int i,j,temp; for(i=1; i<len; i++){ temp=list[i]; for(j=i-1; j>=0 && list[j]>temp; j--){ l原创 2020-09-09 22:11:35 · 376 阅读 · 0 评论 -
<stdlib.h>中的常用库函数
1.atof原型:double atof( const char *str); 功能:将用字符串表示的浮点数(或整数)转换为double型的数据。(某种程度上来说,atof函数和前面的sscanf函数在功能上有一定的类似)2.malloc原型:void *malloc( size_t size ); 功能:向系统申请开辟size个字节的内存空间。如果内存开辟成功,返回新开辟的内存空间的首地址,否则返回NULL。3.free原型:void free(void *ptr); 功能:将p..原创 2020-09-09 20:35:45 · 901 阅读 · 0 评论 -
<math.h>中常用的库函数
1.fabs原型:double fabs(double arg); 功能:返回参数arg的绝对值。(fabs也可以计算整型数的绝对值,只需要将返回结果强制转换为整型即可)2.sqrt 原型:double sqrt(double num); 功能:返回参数num的平方根,num不能为负数。 3.pow原型:double pow(double base, double exp); 功能:返回以参数base为底的exp次幂。如果base为0,则exp不能为负数。如果base不为0原创 2020-09-09 20:29:28 · 2228 阅读 · 2 评论 -
<string.h>中常用的库函数
1.strlen原型:unsigned int strlen(char *str); 功能:计算并返回一个字符串的长度。在计算字符串长度时,没有把字符串结束符(\0)计算在内。 strlen只能用于计算字符串的长度,不能用于计算各种类型的数组长度。2.strcmp原型:int strcmp( const char *str1, const char *str2); eg: char *str1, *str2;if(strcmp(str1,str2)<0) ...else原创 2020-09-09 17:34:45 · 985 阅读 · 0 评论 -
<stdio.h>中的常用库函数
1.sscanf原型:int sscanf(const char *buffer, const char *format, ...); eg: char buffer[] = "19:11:26";int hh,mm,ss;sscanf(buffer, "%d:%d:%d", &hh, &mm, &ss);printf("%s\n",buffer); 功能:从一个已知字符串(即函数原型中的buffer参数)中读取与制定格式相符的数据。与scanf相似,只不过ss.原创 2020-09-08 16:50:46 · 3406 阅读 · 0 评论 -
判断输入是否结束(不给定输入个数,oj常见)
cin:while( cin >> x ){}scanf:while( scanf( "%d" , &x ) != EOF){}gets/getchar:while( gets(str) ){}——!容易忽视的地方!!!当用scanf输入完数据后,后面又用gets输入字符串或者用getchar输入字符,如下代码:while(scanf("%d%d",&a,&b)!=EOF){ ... gets(str);原创 2020-09-07 21:03:27 · 2420 阅读 · 0 评论 -
最大公约数和最小公倍数的求法小结
对于两整数x,y,有x*y=最小公倍数*最大公约数(可以据此来求出其一之后直接得到其二的值)求最大公约数的三种方法1.辗转相除法int gys(int x, int y) { int temp = y; while(x%y!=0) { temp = x%y; x = y; y = temp; } return temp; }2.辗转相减法..原创 2020-09-04 19:03:24 · 196 阅读 · 0 评论 -
stable_sort()与sort()的用法区别
带有stable的函数可保证相等元素的原本相对次序在排序后保持不变。(stable_sort内部实现是归并排序,稳定,sort是快速排序,不稳定)在刷oj时碰到的,蛮有意思的一个点,需要记住!原创 2020-09-04 16:34:24 · 293 阅读 · 0 评论 -
数学——求一个整数的回文数
int rever(int n){ int rn; while(n){ rn = rn * 10 + n % 10; n /= 10; } return rn;}原创 2020-09-02 17:22:51 · 217 阅读 · 0 评论 -
数学——求一个整数的最大质因子
数学——求一个整数的最大质因子做法:除掉所有小于其算术平方根的质因子(注意比如100有2个2),比较最后结果和所记录的最大质因子并返回。int sushu(int n){ int max=0; for(int i=2;i*i<=n;i++){ while(n%i==0){ if(i>max) max=i; n/=i; } } return n原创 2020-09-02 16:56:36 · 994 阅读 · 0 评论