数组的排序操作在面试中经常被问到,在Java中,数组的排序有八大算法:
下面将实现几种排序算法如何实现:
冒泡排序算法:
冒泡排序(升序)原理:
1、比较相邻两个的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
下图是第一轮比较的实现过程:
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序有个口诀,如下:
1、N个数字来排序
2、两两比较小靠前
3、外层循环N-1
4、内层循环N-1-i
代码实现:
输出结果:
选择排序算法:
冒泡排序(升序)原理:先找到数列中最小的数,然后将它放在数列中的最前面。接下来再剩下的数中选择最小数,将它放在第一个的后面,以此类推,直到数列中仅剩一个数为止。
代码实现:
输出结果:
从选择排序的过程来看,它最大的特点是交换移动数据次数相当少,这样就节约了相应的时间。因此,选择排序的性能要优于冒泡排序。
插入排序算法:
插入排序(升序)原理:插入排序法的算法是在已排好序的子数列中反复插入一个新元素来对数列值进行排序的。每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。
原理图:
代码实现:
输出结果: