程序员进行编程的过程中肯定少不了对于数据的处理,那么此时了解Java算法就非常重要,Java算法有很多,今天千锋小编针对Java中常用的算法做了一期整理,下面就简单的介绍一下程序员常用的一些Java算法。
一、排序
1.1 排序概述
排序(sorting)的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。
内部排序和外部排序:一类是整个排序过程在内存储器中进行,称为内部排序;另一类是由于待排序元素数量太大,使得内存储器无法容纳全部数据,排序需要借助外部存储设备才能完成,这类排序称为外部排序。
比较排序和非比较排序
大部分排序都是需要通过比较首先来判断大小,作为排序的依据的。
但是也有例外,比如计数排序、基数排序不需要进行比较。效率可以更高,但同时也会有一些限制条件,也可能需要更多的空间。
冒泡排序、选择排序、直接插入排序是最基本的三种排序,效率低但是算法简单。排序的学习一般从这三种排序算法着手。
1.2冒泡排序
冒泡排序的算法
1) 整个数列分成两部分:前面是无序数列,后面是有序数列
2) 初始状态下,整个数列都是无序的,有序数列是空
3) 如果一个数列有n个元素,则至多需要n-1趟循环才能保证数列有序
4) 每一趟循环可以让无序数列中最大数排到最后,(也就是说有序数列的元素个数增加1)
5) 每一趟循环都从数列的第一个元素开始进行比较,依次比较相邻的两个元素,比较到无序数列的末尾即可(而不是数列的末尾)
6) 如果前一个大于后一个,交换
1.3 选择排序
选择排序的算法
1) 整个数列分成两部分:前面是有序数列,后面是无序数列
2) 初始状态下,整个数列都是无序的,有序数列是空
3) 一共n个数,需要n-1趟循环(一趟都不能少)
4) 每比较完一趟,有序数列数量+1,无序数列数量-1
5) 每趟先假设无序数列的第1个元素(整个数列的第i个元素)是最小的,让当前最小数,从第i+1个元素开始比较,一直比较到最后一个元素。如果发现更小的数,就假设当前数是最小数。
6) 一趟比较完后,将发现最小数和无序数列的第一个数交换(如果最小数不是无序数列的第一个数)
二、递归和折半查找
2.1 递归
递归(recursion)是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快速排序等问题。
递归问题的特点:一个问题可被分解为若干层简单的子问题;子问题和其上层问题的解决方案一致;外层问题的解决依赖于子问题的解决。
与此同时,递归有着思路自然、程序简单的优点,自然也有缺点,递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多。
2.2 折半查找
折半查找又称为二分查找,这种查找方法需要待查的查找表满足两个条件:
首先,查找表必须使用顺序存储结构;
其次,查找表必须按关键字大小有序排列。
上面就是java中常用的算法的一个简单的介绍和总结。希望这篇对Java语言经典算法的介绍能够帮助大家。如果你对Java培训有兴趣,欢迎随时咨询千锋教育!