Java编程-算法
gavenyeah
北京师范大学计算机专业研究生
展开
-
求n位全排列字典排序后,给定序列的下一序列
求n位全排列字典排序后,给定序列的下一序列。例如n=3的全排列:123,132,213,231,312,321. 给定序列213,则需要输出231思考:按字典排序后,要输出给定序列N的下一序列,则要尽量保证前面的几位不变,变化数字的位置越靠后,则数值改变越小。publicstatic int nextArray (intN ,intn){原创 2016-03-01 19:10:43 · 1318 阅读 · 0 评论 -
java查找算法(一)--顺序查找
对给定数组(字符串)顺序进行查找元素是否存在。public class SeqSearch { public static void main(String args[]){ int [] array={32,5,67,6,1,7}; int data=6; Sy原创 2016-03-21 14:08:42 · 3989 阅读 · 0 评论 -
java查找算法(二)--二分递归查找
二分查找的前提是数组必须是已经排好序的,才能对中位数进行比较后选择在哪边查找。递归查找(recursion):// 二分查找的前提是数组必须是已经排好序的,才能对中位数进行比较后选择在哪边查找public static int binarySearch_Recursion (int []a , int left, int right, int d){ //left,right均为下标, d 为数原创 2016-03-21 14:10:09 · 1164 阅读 · 0 评论 -
java查找算法(三)--二分非递归查找
//非递归算法:public static int binarySearch_NonRec (int []a , int left, int right, int d){ //left,right均为小标 while (left <right ){ // 利用 while循环改变查找的范围,通过改变 left 和right 大小 int mid =(le原创 2016-03-21 14:14:19 · 635 阅读 · 0 评论 -
java查找算法(四)--随机查找(Randomized-Select)
/* * 以快排为模型,以第一个数为基准对数组进行划分,找到第一个数的正确位置 * 比较a[low]=pivot 值得位置与 k 的大小,确定继续在左右还是右边递归查找 * 平均时间复杂度为 O(n) * */public static int quickSearch (int []array , int left, int right, int k){ //left,right 位下标,原创 2016-03-21 14:17:39 · 2525 阅读 · 0 评论 -
java查找算法(五)--BFPRT查找算法
/* 思想与随机排序一样,随机排序中吧第一个数当做 pivot ,BFPST 排序中用中位数的中位数作为 pivot ,使划分效果更好 * 找到中位数的位置后,与 a[low] 交换,这样就转化为随机排序 * 比较a[low]=pivot 值得位置与 k 的大小,确定继续在左右还是右边递归查找 * 最坏情况下时间复杂度为 O(n)( 1)将输入数组的个元素划分为 n/5 组,每组5 个元素,原创 2016-03-21 14:18:51 · 1526 阅读 · 2 评论 -
求数组的最大K个数
Q:查找n个无序数(不重复)的最大K个数(考虑N很大时的时间复杂度)? 分析:如果对N个数进行先排序,再输出最大的K个数,则时间复杂度较大为O(nlgn)。所以可以查找数组的第N-K大的数记为pivot,对数组以pivot进行划分,则右边的数均比pivot大。 如果先找到n-k位置上的数,再划分,则复杂度可以降为O(n)。 由于原数组无序,故可以考虑随机选择查找(平均复杂度为O原创 2016-03-21 19:00:07 · 1683 阅读 · 0 评论 -
Java排序算法(三)--归并排序(MergeSort)递归与非递归的实现
归并排序的思想是: 1.将原数组首先进行两个元素为一组的排序,然后合并为四个一组,八个一组,直至合并整个数组; 2.合并两个子数组的时候,需要借助一个临时数组,用来存放当前的归并后的两个数组; 3.将临时数组复制回原数组对应的位置。public static void mergeSort (int [] data ,int left,int right){ //left原创 2016-03-21 09:39:22 · 8504 阅读 · 3 评论 -
大搬家 (2016"百度之星" - 测试赛(热身,陈题))--Java代码
原题:(地址http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=695&pid=1001)1001 大搬家 Accepts: 1516 Submissions: 6288 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K原创 2016-05-13 17:49:47 · 765 阅读 · 0 评论 -
Java二叉树(三)--非递归的中序_先序_后序遍历二叉树
二叉树的递归遍历非常简单,但是非递归遍历就需要一点小技巧了,否则代码逻辑容易混乱,这里我给每一个节点定义里加入了一个访问标记flag,这样可以有效避免重复访问和代码逻辑不清楚的问题。代码如下:package binarytree;import java.util.Stack;/** * @author Gavenyeah * @date Time: 2016年5月13日上午8:46:38 *原创 2016-05-13 10:57:56 · 867 阅读 · 0 评论 -
java排序算法(九)--排序算法总结分析
排序是实际生活中经常遇到的问题,不同的排序方法有不同的试用情况,我们应灵活应用。原创 2016-03-21 14:06:01 · 593 阅读 · 0 评论 -
Java排序算法(七)--简单选择排序(SelectionSort)
简单选择排序:每次选择一个当前最小的数字放在最终位置上。public static int [] selectionSort( int []d ){ for(int j =0;j <d .length;j ++){ int min =j ; for(int i =j +1;i <d .length;i ++){原创 2016-03-21 10:47:33 · 587 阅读 · 0 评论 -
n位数字的全排列
n位数字的全排列共有n!种。 本排列只对字符型数字排列进行输出,输出的是字符型数字。这种文图一般都需要用递归的方法。java代码如下:public class Test {static int k=0;public static void main(String[] args) { int a[]={1,2,3,4,5}; permutations(a,0,4);}publ原创 2016-03-02 08:33:17 · 3066 阅读 · 0 评论 -
编程求直方图中的最大矩形面积
求直方图中的最大矩形面积: 例如给定直方图{2,3,1,2,4,2} 则直方图中最大矩形面积为x=(3,6),|x|=3,y=2,max面积=6 思考:利用枚举法 /*当前位置往前进行枚举法*/publicclass Solution{ static int histogramMaxArea( int[]a ){ int maxS =a [0];原创 2016-03-03 09:33:13 · 2274 阅读 · 0 评论 -
Java排序算法(二)--堆排序(HeapSort)
堆排序的思想是: 1.比较第i个位置与第2i和2i+1个位置上的节点值,将较大的元素上移; 2.重复1,使最大的元素移到根节点; 3.将根节点与最末的元素交换位置,递归1,2,3使剩下的n-1个元素也依次移到当前最后。static void heapSort( int[]a ){ for(int n=a.length;n>0;n--){原创 2016-03-21 09:30:03 · 459 阅读 · 0 评论 -
Java排序算法(一)--快速排序(QuickSort)
快排是最重要,使用最多的一种排序方法,其思想应用在了很多其他的快速查找等算法里。主要思想是: 1.把数组的第一个元素作为基准(pivot),将数组划分; 2.比较要查找的值与pivot的大小,确定在左半边还是右半边进行递归查找public static void quickSortA(int []d,int left,int right){ //left,right原创 2016-03-21 09:08:25 · 987 阅读 · 0 评论 -
Java排序算法(四)--直接插入排序(InsertSort)
直接插入排序是最直接,最基础的一种排序方法,在其他的排序或者查找算法中也经常会用到直接插入排序。思想:按顺序依次将需要排序的数字插入已排序好的队列中。将temp与d[j-1]比较,找到temp的位置,将插入位置之后的元组后移一位。public static int [] insertionSort (int []d ){ for(int i =1;i <d .length;i ++原创 2016-03-21 10:33:36 · 700 阅读 · 0 评论 -
Java排序算法(五)--希尔排序(ShellSort)
希尔排序(插入排序-渐减增量排序diminishing increment sort): 思想:1.将原始数组按照增量分解为多个数组,分别按插入排序调好子序列的顺序; 2. 减小增量,重复第一步,直至增量为1。public static int [] shellSort (int []d ){ int h =1;原创 2016-03-21 10:43:44 · 1288 阅读 · 0 评论 -
Java排序算法(六)--冒泡排序(交换排序)
思想:从后往前,如果d[i]public static int [] bubbleSort( int []d ){ for(int j=0;j<d.length;j++){ for(int i=d.length-1;i>0;i--){ if(d[i]<d[i-1]){ int temp =d [i原创 2016-03-21 10:46:12 · 394 阅读 · 0 评论 -
Java排序算法(八)--基数排序(RadixSort)
基数排序:import java.util.LinkedList;publicstaticvoidradixSort (int[]data,intradix,intdigits){ //radix表示基数(进制),digits表示最大数值位数 LinkedList<LinkedList> queue= new LinkedList<LinkedList>();原创 2016-03-21 10:55:47 · 2149 阅读 · 0 评论 -
java中保留2位小数的四种方法
在写程序的时候,有时候可能需要设置小数的位数,那么java中有哪几种保留小数位数的方法呢?本文以两位小数为例给出四种方法。package CodeJava_Leet;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberFormat;/** * Created by Yechengpe原创 2016-08-26 22:46:46 · 54840 阅读 · 1 评论