
数据结构与算法
.
海洋 之心
图神经网络-大数据-推荐系统研究者,专注于计算机领域前沿技术的分享等人工智能算法研究工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2020年4月蓝桥杯第二次模拟赛解题报告(本科组)Java语言 第三题
3 单词重排 【问题描述】 将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。 请问,总共能排列如多少个不同的单词。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 解析 求全排列,去重,计数 结果:2520 1、利用Java的Set特性可以自动对目标答案去重 2、利用深度优先遍历实现不断形成新的不同答案排列 代码如下:原创 2020-10-23 21:21:47 · 302 阅读 · 0 评论 -
C语言实现高精度(大位数)阶乘
1.进位 int s=c[j]*i+jw; jw=s/10; c[j]=s%10; 源码 #include <stdio.h> #include <string.h> #define Max 3000 void multiply(int n); int main() { int n; scanf("%d",&n); factorial(n); } void factorial(int n){ i原创 2020-07-10 13:10:52 · 863 阅读 · 0 评论 -
C语言实现高精度(大位数)乘法
1.正负号处理 int flaga=1; if(s1[0]=='-'){ flaga=0; strcpy(s1,&s1[1]); } if((flaga&&!flagb)||(!flaga&&flagb)) putchar('-'); 2.最不利原则 int len=lena+lenb; 3.进位处理 c[i+j]=a[i]*b[j]+jw+c[i+j]; jw=c[i+j]/原创 2020-07-10 12:59:28 · 711 阅读 · 0 评论 -
C语言实现高精度(大位数)减法
1.位数的确定:假设c用来保存大数据a与大数据b的差,那么c的长度len = max(lena,lenb) 2.进位处理: if(a[i] < b[i]) { a[i+1]--; a[i] = a[i] + 10; } c[i] = a[i] - b[i]; 3.判断数的大小 int compare(char s1[],char s2[]){ if(strlen(s1)>strlen(s2)) return 1; if(strlen(s1原创 2020-07-10 12:40:43 · 734 阅读 · 0 评论 -
C语言实现高精度(大位数)加法
1.位数的确定:假设c用来保存大数据a与大数据b的和,那么c的长度len= max(lena,lenb) + 1 2.进位处理: c[i] = a[i] + b[i]+jw;(jw为每轮进的位) jw = c[i]/10; c[i] = c[i]%10; 3.删除前导0 for(int i=len-1;i>=0;i--){ if(c[i]==0&&len>1) len--; else原创 2020-07-10 12:07:45 · 1034 阅读 · 0 评论 -
Java实现快速排序
快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。 思想: 1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素; 2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边; 3.对左右两个分区重复以上步骤直到所有元素都是有序的。 所以我是把快速排序联想成东拆西补或西拆东补,一边拆一边补,直到所有元素达到有序状态。 源码 package com; im原创 2020-07-09 23:32:16 · 309 阅读 · 0 评论 -
Java实现归并排序
归并是将两个或多个存序记录序列合并成一个有序序列。归并方法有多种,一次对两个有序记录序列进行归并,称为路归并排序,也有三路归并排序及多路归并排序。本实例是二路归并排序,基本方法如下: (1) 将 n 个记录看成是 n 个长度为 1 的有序子表。 (2) 将两两相邻时有序无表进行归并。 (3) 重复执行步骤 (2) 直到归并成一个长度为 n 的有序表。 源码 package com; import java.util.Arrays; import java.util.Scanner; public cla原创 2020-07-09 23:14:30 · 227 阅读 · 0 评论 -
Java实现基数排序
基数排序和计数排序一样无需进行比较和交换,和桶排序一样利用分布和收集两种基本操作进行排序。基数排序是把每一个元素拆成多个关键字,一个关键字可以在每一个元素上同等的位置进行计数排序,一个元素拆成多个关键字可以看作是要进行几轮分桶,以一个元素最长的长度为准。 基数排序可以看成多(单)关键字的排序,可以想象成桶排序那样分桶排序,也可以像计数排序那样归约化分治。 基数排序的思想是将待排序序列中的每组关键字进行桶排序。例如整数序列[103, 9, 1,7,11,15, 25, 201, 209, 107, 5]上每个原创 2020-07-09 23:01:26 · 258 阅读 · 0 评论 -
Java实现插入排序
插入排序: 文字描述过程: 第1趟插入:将第2个元素插入前面的有序子序列,此时前面只有一个元素,当然是有序的 第2趟比较:将第3个元素插入前面的有序子序列,前面的2个元素是有序的 … 第n-1趟比较:将第n个元素插入前面的有序子序列,前面n-1个元素是有序的 源码 package com; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args原创 2020-07-09 22:43:41 · 224 阅读 · 0 评论 -
Java实现希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。 基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步原创 2020-07-09 22:37:34 · 209 阅读 · 0 评论 -
Java实现选择排序
基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。 在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。 下面,以对 3 2 4 1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置。 第1轮 排序过程 (寻找第1小的数所在的位置) 3 2 4 1(最初, min_index=1) 3 2 4 1(3 > 2, 所以m原创 2020-07-09 22:28:45 · 294 阅读 · 0 评论 -
Java实现冒泡排序
冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 源码 package com; import java.util.Arrays; import java.util.Scanner; public class Main { public static void原创 2020-07-09 22:21:31 · 294 阅读 · 0 评论 -
Java实现哈希表
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。例如:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。 源码 package com; import java.util.Scanner; im原创 2020-07-09 18:00:52 · 411 阅读 · 0 评论