![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 60
已是寒冬
人生亦有命,安能行叹复坐愁!
展开
-
堆排序实现(Java)
堆排序是一种选择排序,其时间复杂度为O(nlogn)。它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。 堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。堆的存储 一般用数组来表示堆,若根结点存在序号0处, i结点的父结点下标就为(i-1)/2。i结点的左原创 2017-03-13 23:24:56 · 293 阅读 · 1 评论 -
深度优先搜索与广度优先搜索
一、基本实现深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形: 1、把根节点压入栈中。 2、每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱。 3、找到所要找的元素时结束程序。 4、如果遍历整个树还没有找到,结束程序。广度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形: 1、把根节点放到队原创 2017-09-12 16:22:24 · 261 阅读 · 0 评论 -
二分查找算法
一、介绍二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表原创 2017-09-12 10:12:53 · 291 阅读 · 1 评论 -
Java筛选法求素数
题目描述 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7)) 输入描述:输入包括一个整数n,(3 ≤ n < 1000)输出描述:输出对数示例1 输入 10 输出 2import java.util.Scanner;public class Ma原创 2017-09-13 10:06:24 · 2802 阅读 · 0 评论 -
动态规划详解
一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的原创 2017-04-11 00:24:58 · 601 阅读 · 1 评论 -
希尔排序实现(Java)
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法的基本思想是: 1、把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。 2、随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。在上面这幅图中:初始时,有一个大小为原创 2017-03-14 15:58:11 · 456 阅读 · 0 评论 -
快速排序实现(Java)
快速排序排序效率在同为O(N*logN)的几种排序方法中效率较高。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。快速排序又有一个形象的表达:挖坑填数+分治法(代码如下):class Qu原创 2017-03-11 01:04:09 · 295 阅读 · 1 评论 -
归并排序实现(Java)
归并排序法(Merge Sort,以下简称MS)是分治法思想运用的一个典范。其主要算法操作可以分为以下步骤: Step 1:将n个元素分成两个含n/2元素的子序列 Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列) Step 3:合并两个已排序好的序列 易知,MS的关键在于Merge过程。对于这一过程的理解,算法导论中给出了一个形象的模型。 即假设桌面上有两堆原创 2017-03-09 23:16:26 · 385 阅读 · 0 评论 -
插入排序实现(Java)
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。步骤: 设数组为a[0…n-1]。初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。i++并重复第二步直到i==n-1。排序完成。原创 2017-03-09 20:49:52 · 165 阅读 · 0 评论 -
选择排序实现(Java)
它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。 public static int[] selectionSort(int[] A, int n) { int i,j,minIn原创 2017-03-09 20:35:25 · 290 阅读 · 0 评论 -
冒泡排序实现及优化(Java)
冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较首先简单的第一种实现方法: public static int[] bubbleSort1(int[原创 2017-03-09 20:03:03 · 1018 阅读 · 0 评论 -
贪心算法
一、基本思想顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。二、基本要素1.贪心原创 2017-09-12 22:21:29 · 557 阅读 · 0 评论