如果是想学习android的开发,那么java编程那是走不掉的了,学习编程无非是首先是要掌握变量、数组等基本的知识,编程它涉及到的知识点是比较多的,因此在学习路途中需要走好每一步的,本文将为大家带来的是java常用的排序算法,有需要的朋友可以参考一下。
1.选择排序算法
使用选择排序的基本思想是遍历数组的过程中,它是以i代表当前需要排序的序号,则需要在剩余的[i…n-1]中找出其中的一个 小值,然后将找到的最小值与i指向的值进行交换。我们知道因为每一趟确定元素的过程中都会有一个选择 大值的子流程, 因此也是可以形象的称它为选择排序。使用选择排序的时间复杂度和空间复杂度分别为o(n2)和o(1),下面我们看一个实例代码所示:
2.冒泡排序算法
冒泡排序它的意思就是将比较大的数字在最下面,而较小的数字是浮在上面的一个意思,看到下图中所示的数组代码:
3.排序算法
通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,已达到整个序列有序的目的,本质就是,找一个基位(枢轴,分水岭,作用是左边的都比它小,右边的都比它大.可以是随机的,把它取名base,首先从序列最右边开始找比base小的,如果小,则是可以换位置,从而base移到刚才右边(比较时比base小)的位置(记为临时的high位),这样base右边的都是比base大。
接着是从序列的最左边开始找比base大的,如果大,换位置,从而base移动到刚才左边(比较时比base大)的位置(记为临时的low位),这样base左边的都比base小,再进行循环以上两步,直到low==heigh,这个时候才是真正的找到了枢轴,分水岭.返回这个位置,分水岭左边和右边的序列,然后是分别再来进行一个递归,看下下图的实例代码所示:
4.合并排序算法
合并排序采用的是递归来实现,因此是属于“分而治之”,它可以是将目标数组从中间一分为二,然后是分别对这两个数组进行排序,当排序完毕之后再将排好序的两个数组“归并”到一起,合并排序实际上重要的是合并的一个过程,在合并的过程中,则是需要额外的跟需要归并的两个数组长度一致的空间,这一点我们是需要理解清楚的。
5.插入排序算法
实际上插入排序的思想也是在遍历数组的思想上的,我们假设在序号i之前的元素即[0..i-1]都已经排好序,则是需要找到i对应的元素x的正确位置k,并且在寻找这个位置k的过程中逐个将比较过的元素往后移一位,为元素x“腾位置”, 后将k对应的元素值赋为x,那么在一般情况下,插入排序的时间复杂度和空间复杂度分别为o(n2)和o(1),注意它和选择排序的方法有那么一点的区别。
6.希尔排序算法
所谓的希尔排序的诞生是由于插入排序在处理大规模数组的时候会遇到需要移动太多元素的问题。使用希尔排序的思想实际上是将一个大的数组“分而治之”,划分为若干个小的数组,以gap来划分,比如数组[1,2,3,4,5,6,7,8],如果以gap=2来划分,可以分为[1,3,5,7]和[2,4,6,8]两个数组(对应的,比如gap=3,则是划分的数组为:[1,4,7]、[2,5,8]、[3,6])然后是分别对划分出来的数组进行插入排序。
等待各个子数组排序完毕之后再减小gap值重复进行之前的步骤,直至gap=1,即对整个数组进行插入排序,此时的数组已经基本上快排好序了,所以需要移动的元素是很小的,这将会是解决了插入排序在处理大规模数组时较多移动次数的一个问题。
希尔排序它是插入排序的改进版,在数据量大的时候对效率的提升帮助很大,当如果是数据量比较小的时候,那么建议直接使用插入排序就可以了。
7. 后来看看堆排序算法
堆排本质上就是先构造一个大顶堆,parent比children大,root的节点就是 大的节点把 大的节点(root)与尾节点( 后一个节点,比较小)位置互换,然后剩下 后的尾节点,现在 大,其余的,从第 一个元素开始到尾节点前一位,从而使构造大顶堆递归,以下是堆排的一个实例:
以上是排序常用的方法,这几种方式都有它一定的特点,java中常用的七大排序算法是比较重要的一个基础知识点,在这个阶段中如果学好了,则在正则表达式之类的学习将会更加有利。
温馨提示
温馨提示
相关资讯