我的Java开发学习之旅------>Java经典排序算法之归并排序

一、归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,...
阅读(1255) 评论(0)

我的Java开发学习之旅------>Java经典排序算法之快速排序

一、算法思想      快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1) 分治法的基本思想      分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 (2)快速排序的...
阅读(1021) 评论(0)

我的Java开发学习之旅------>Java经典排序算法之二分插入排序

一、折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法。在处理A[i]时,A[0]……A[i-1]已经按关键码值排好序。所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故...
阅读(1314) 评论(1)

我的Java开发学习之旅------>Java经典排序算法之希尔排序

一、希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名。Shell排序又称作缩小增量排序。 二、希尔排序的基本思想 希尔排序的中心思想就是:将数据进行分组,然后对每一组数据进行排序,在每一组数据都有序之后 ,就可以对所有的分组利用插入排序进行最后一次排序。这样可以显著减少交换的次数,以达到加快排序速度的...
阅读(1788) 评论(1)

我的Java开发学习之旅------>Java经典排序算法之插入排序

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。 二、算法描述 1、从第一个元素开始,该元素可以认为已经被排序。 2、取出下一个元素,在已经排序的元素序列中从后向前扫描。 3、如果该元素(已排序)大于新元素,则将该元素移到下一位置。 4、重复步骤3,直到找到已排序的元素小于或者大于新元素的位置。 5、将新元素插入到...
阅读(1129) 评论(0)

我的Java开发学习之旅------>Java经典排序算法之选择排序

一、算法原理 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一...
阅读(1347) 评论(0)

我的Java开发学习之旅------>Java经典排序算法之冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 一、算法原理    冒泡排序算法的运作如下: 1、比较相邻的元素。如果第一个比第...
阅读(1642) 评论(1)

我的Java开发学习之旅------>System.nanoTime与System.currentTimeMillis的区别

首先来看一道题:下面代码的输出结果是什么? import java.util.HashMap; import java.util.Map; public class HashMapTest { public static void main(String[] args) { Map map=new HashMap(); map.put(String.valueOf(System.cu...
阅读(5411) 评论(0)

我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行

习惯了在IDE工具上进行代码编写,连最基本的Javac命令和Java命令都忘记的差不多了,今天对一个Java内部类进行编译和运行的时候,就出糗了。   IDE是把双刃剑,它可以什么都帮你做了,你只要敲几行代码,点几下鼠标,程序就跑起来了,用起来相当方便。你不用去关心它后面做了些什么,执行了哪些命令,基于什么原理。然而也是这种过分的依赖往往让人散失了最基本的技能,当到了一个没有IDE的地方,你便觉...
阅读(1709) 评论(14)

我的Java开发学习之旅------>求N内所有的素数

一、素数的概念 质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2 ...
阅读(2216) 评论(0)

我的Java开发学习之旅------>计算从1到N中1的出现次数的效率优化问题

有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(1)=1;f(13)=6,问一个最大的能满足f(n)=n中的n是什么? 例如:f(13)=6, 因为1,10,11,12,13.正好是6个1。 解析:这题关键在效率上,在没有发现很科学、快速地计算出个数的情况下,可以采取缓存的机制。因为就2000000来说,计算时间就已经无法忍受了,因此,可以把以前的计...
阅读(1776) 评论(0)

我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数

金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。 此题的解题思路如下: 引入TreeSet:通过集合快速找到所有出现过的字符串引入ArrayList:为了快速排序,再通过StringBuffer生成排序...
阅读(2262) 评论(0)

我的Java开发学习之旅------>使用循环递归算法把数组里数据数组合全部列出

面试题如下:把一个数组里的数组合全部列出,比如1和2列出来为1,2,12,21。 (面试题出自《Java程序员面试宝典》) 代码如下: import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * 把一个数组里的数组集合全部列出,比如1和2列出来为1,2,12,21 */...
阅读(2184) 评论(0)

我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑

又是一道面试题,来测试你的Java基础是否牢固。 题目:以下代码的运行结果是? public class TestValue { public static void test(String str) { str="World"; //代码3 } public static void main(String[] args) { String string = "Hello";...
阅读(1193) 评论(1)

我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换

今天看到两个面试题,居然都做错了。通过这两个面试题,也加深对三目运算是的自动类型转换的理解。 题目1.以下代码输出结果是()。 public class Test { public static void main(String[] args) { int a=5; System.out.println("value is :"+((a<5)?10.9:9)); } }...
阅读(2232) 评论(4)

我的Java开发学习之旅------>Java使用Fork/Join框架来并行执行任务

现代的计算机已经向多CPU方向发展,即使是普通的PC,甚至现在的智能手机、多核处理器已被广泛应用。在未来,处理器的核心数将会发展的越来越多。 虽然硬件上的多核CPU已经十分成熟,但是很多应用程序并未这种多核CPU做好准备,因此并不能很好地利用多核CPU的性能优势。 为了充分利用多CPU、多核CPU的性能优势,级软基软件系统应该可以充分“挖掘”每个CPU的计算能力,决不能让某个CPU处于“空闲”...
阅读(7522) 评论(1)

我的Java开发学习之旅------>Java NIO 报java.nio.charset.MalformedInputException: Input length = 1异常

今天在使用Java NIO的Channel和Buffer进行文件操作时候,报了java.nio.charset.MalformedInputException: Input length = 1异常,具体如下: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.t...
阅读(6968) 评论(0)

我的Java开发学习之旅------>Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法

今天用Ob...
阅读(4597) 评论(0)

我的Java开发学习之旅------>Java语言中方法的参数传递机制

如果声明方法时包含来了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时传给形参的参数值也被称为shican       Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。   Java参数,不管是原始类型还是引用类型...
阅读(1509) 评论(0)
    个人资料
    • 访问:1823973次
    • 积分:21220
    • 等级:
    • 排名:第378名
    • 原创:363篇
    • 转载:109篇
    • 译文:0篇
    • 评论:920条
    感谢您为博客进行打赏
      支付宝&微信支付二维码
      支付宝&微信支付
    站长统计
    友情链接
    博客专栏
    最新评论