java算法——玩家扑克牌
* 玩家
* 扑克牌
* 创建一副扑克牌,不包含大小王
*定义扑克牌的属性(花色和点数)
java算法——奇数阶魔方阵
奇数阶魔方阵
* 1.自然数1出现在第一行的正中间
* 2.若填入的数字在第一行(不在第n列),则下一个数字在第n行且列数加1
* 3.若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧
* 4.一般地,下一个数字在前一个数字的右上方(行数少1,列数加1)
* 5.若应填的地方已经有数字或在方阵之外,则下一个数字就填在前一个数字的下方。
java算法——上三角、下三角、对称矩阵
上三角、下三角、对称矩阵、
* 上三角:对角线以下均为0
* 下三角:对角线以上均为0
* 对称矩阵:元素对称于对角线
java算法——稀疏矩阵
稀疏矩阵
* 每个非零元素及其对应的行下标和列下标构成一个三元组,
* 稀疏矩阵中所有这样的三元构成一个以三元组为数据元素的线性表。
* 稀疏矩阵的压缩存储结构
* 数组结构存储——把所有三元数存储在一个数组中
* 链表结构存储——三元链表中每个结点的数据域由稀疏矩阵非零元的行号、列号和元素值组成
java算法—— 三色旗问题
三色旗问题
* 最左边开始,遇到蓝色向左移,遇到白色不动,遇到红色右移
java算法——多维矩阵转一维矩阵
二维矩阵转一维矩阵
* 以列为主,loc=column+row*行数
* 以行为主,loc=row+column*列数
* 三维矩阵转一维矩阵,i(u1个数),j(u2个数),k(u3个数)分别表示三维矩阵
* 以列为主,loc=i*u2*u3+j*u3+k;
* 以行为主,loc=k*u1*u2+j*u1+i;
java算法——插补查找法
插补查找法
* 其原理与二分法查找是相同的,搜寻的对象大于500时,
* 比二分法查找速度快
* (K-K1)/(Ku-K1)=(m-1)/(u-1)
java算法——约瑟夫问题
约瑟夫问题
* 在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,
* 39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人
* 排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再
* 由下一个重新报数,直到所有人都自杀身亡为止。他将朋友与自己安排在第16
* 个与第31个位置,于是逃过了这场死亡游戏。
java算法—— 最大公约数、最小公倍数
最大公约数、最小公倍数
* 最大公约数(a,b)
* 12的因数:1、2、3、4、6、12
* 18的因数:1、2、3、6、9、18
* 12和18的最大公约数——6
* 最小公倍数[a,b]
* A=2*3*7
* B=2*5*7
* AB的最小公倍数——2*3*5*7=210
*
* 两个数的积等于这两个数的的最大公约数与最小公倍数的积。即(a,b)*[a,b]=a*b
java算法——帕斯卡(杨辉)三角
帕斯卡(杨辉)三角
* 问题:取N阶的杨辉三角并显示
* 分析:三角形边上数都是1,内部的没一个数是位于它上面的两个数的和。
* 假设f(row,col)表示杨辉三角的第row行的第col列元素,那么
* f(row,col)=1(col=1或row=col),也就是递归的停止条件。
* f(row,col)=f(row-1,col-1)+f(row-1)+f(col),也就是上一行相邻两个数的和
java算法——斐波那契数列
斐波那契数列
*以兔子繁殖为例子而引入,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
* 在数学逻辑上以递归方法定义
java算法——二分法查找
二分法查找
*进行二分法查找的前提是数组已有序
*查找范围的上下界
java算法——汉诺塔经典的递归
汉诺塔——经典的递归
*实现移动函数
*递归实现汉诺塔函数
java算法——基数排序/桶排序
基数排序/桶排序
*统计将数组中的数字分配到桶中后,各个桶中的数字个数
*数组中每个数的每一位数根据大小分配到对应大小为0~9的桶
*将各个桶中的数字个数,转化成各个桶中最后一个数字的下标索引
java算法——归并排序
归并排序
在排序前,先建好一个长度等于原数组长度的临时数组
java算法——堆排列
* 堆排列
* 1.将无序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆
* 大顶堆:从下至上升序
* 小顶堆:从下至上降序
* 2.将堆顶元素与末尾元素交换
* 3.重新调整结构,满足堆定义(大顶堆或小顶堆),然后继续交换堆顶元素与
* 当前末尾元素,反复执行调整+交换步骤,知道整个序列有序
java算法——快速排序
快速排序
* 1.i=left,j=right,将基准数挖出形成第一个坑a[i];
* 2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i];
* 3.i++由前向后找比它大的数,找到后挖出此数填到前一个坑a[j]中
* 4.以i为中线,分左右两个区间,重复2,3,步骤,直到i==j,将基准数填入a[i]中
java算法——希尔排序
按下标的一定增量分组,对每组使用直接插入算法排序;随着增量
* 逐渐减少,每组包含的关键字越来越多,当增量减至1时,整个文件恰
* 好被分成一组,算法便终止。
* 8,9,1,7,2,3,5,4,6,0
* //初始增量 gap=length/2=5,向下取整, 分为5组,下标[i]和[i+5]进行比较
* 3,5,1,6,0,8,9,4,7,2
* //缩小增量 gap=5/2=2,分为2组,下标[i],[i+2],[i+4],[i+6],[i+8]
* 0,2,1,4,3,5,7,6,9,8
* //在缩小增量gap=2/2=1,分为1组
* 0,1,2,3,4,5,6,7,8,9
java算法——插入排序
插入排序:
* 始终定义第一个元素为有序, 将无序元素
* 逐个插入到有序排列之中,不断的移动数据,
* 空出一个适当的位置,把待插入的元素放到里
* 面去。
java算法——冒泡排序
* 冒泡排序:
* 每次在无序队列里将相邻两个数一次进行比较,
* 将小数调到前面,逐次比较,直至将最大的数移到
* 最后。将剩下的N-1个数继续比较,将次大数移至
* 倒数第二位。
java算法——选择排序
选择排序:
每次在“无序”队列中选择“最小值”,放在有序队列最后,并从无序队列中删除该值。