算法
月、勾勒了谁的美?
这个作者很懒,什么都没留下…
展开
-
八大排序之希尔排序
介绍: 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。 实现步骤: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组原创 2022-01-12 17:05:00 · 104 阅读 · 0 评论 -
八大排序之归并排序
介绍:归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 实现步骤: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置 第三步:比较两个指针所指向的元素,选择相对小的元素放入原创 2022-01-12 17:00:17 · 115 阅读 · 0 评论 -
八大排序之基数排序
介绍:基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。 实现步骤以最高位是百位为例: 第一步:首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中原创 2022-01-12 16:54:27 · 225 阅读 · 0 评论 -
逆波兰式的转换与计算
第一步:中缀表达式转后缀表达式 转换规则: 第二步:后缀表达式计算得值 计算规则: 代码实现: package calculator; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class CalculatoDemo { public static void main(String[] args) { String origin = "2+原创 2022-01-12 16:44:38 · 338 阅读 · 0 评论 -
八皇后之穷举、回溯(递归)
解决八皇后问题有两种思路,这里作者会用两种思路都将其实现 第一种是穷举法 八皇后问题如果用穷举法需要尝试88=16,777,216种情况。每一列放一个皇后,可以放在第 1 行,第 2 行,……,直到第8行。穷举的时候从所有皇后都放在第1行的方案开始,检验皇后之间是否会相互攻击。如果会,把列H的皇后挪一格,验证下一个方案。移到底了就“进位”到列G的皇后挪一格,列H的皇后重新试过全部的8行。这种方法是非常低效率的,因为它并不是哪里有冲突就调整哪里,而是盲目地按既定顺序枚举所有的可能方案。 穷举法代码:原创 2022-01-12 16:36:10 · 221 阅读 · 0 评论 -
八大排序之堆排序、快速排序、基数排序(java)。
首先我们来聊一聊堆排序,快速排序,基数排序的原理。 一、堆排序 堆排序的原理是先构建大谷堆(或小谷堆),然后将堆顶元素与堆中最后一个元素进行替换,将最后一个元素取出,放在数组的最后面,依次循环,当把所有的元素取完,即构成一组有序数列。 二、快速排序 首先在一个序列中随便找一个数作为基准数,通常是以第一个数为基数,然后设置两个少冰,分别指向第一个元素,和最后一个元素。当哨兵开始巡查时,先动右边的哨兵,如果遇到比基准数小的数则停止,移动左边的哨兵,当左边的哨兵指向的数大于...原创 2021-12-03 15:54:37 · 451 阅读 · 2 评论