本文共 3454 字,大约阅读时间需要 11 分钟。
在程序设计中,经常需要将一组数列进行排序,这样更加方便与统计与查询。这篇博客,我就来介绍几种关于数组排序的方法。
一)通过Arrays类的静态sort()方法,实现对数组进行排序,sort()方法提供了多种重载形式,可对任意类型的数组进行升序排序。
语法如下:
Arrays.sort(object) //其中,object是指进行排序的数组名称。
算法实例:
import java.util.Arrays; //导入java.util.Arrays类public class Demo1 { public static void main(String[] args) { int arr[]=new int[]{5,25,1,77}; Arrays.sort(arr); //运用sort()方法进行排序 for(int i=0 ; i<4 ; i++){ //循环遍历排序后的数组 System.out.print(arr[i]+" "); //将排序后的数组的各个元素进行输出 } }}
运行结果:
上述实例是对整形数据进行排序,Java中的String类型数组的排序算法,是根据字典编排顺序排序的,因此数字排在字母前边,大写字母排在小写字母前面。
二)冒泡排序:这是广大学习者最先接触的一种排序算法,它排序数组元素的过程总是将小数往前放、大数往后放,类似于水中气泡往上升的动作,所以称冒泡排序。
基本思想:冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
算法实例:
public class Demo2 { public static void main(String[] args) { int array[]={55,88,78,12,3,1}; Demo2 demo2=new Demo2(); demo2.sort(array); //调用后面的排序方法将数组进行排序 } /** * 冒泡排序 * * @param array * 要排序的数组 */ public void sort(int[] array){ for(int i=1 ; iarray[j+1]){ int temp=array[j]; //第一个元素存于临时变量temp中 array[j]=array[j+1]; //第二个元素保存在第一个元素单元中 array[j+1]=temp; //把临时变量(也就是第一个元素原值)保存在第二个元素单元 } } } showArray(array); //输出冒泡排序后的数组 } /** * 显示数组胡所有元素 * * @param array * 要显示的数组 */ public void showArray(int[] array){ for(int i:array){ //遍历数组 System.out.print(">"+i); //输出每个数组的元素值 } System.out.println(); }}
运行结果:
冒泡排序的主要思想就是:把相邻两个元素进行比较,如满足一定条件则进行交换(如判断大小或日期前后等),每次循环都将最大(或最小)的元素排在最后,下一次循环是对数组中其他元素进行类似操作。
三)直接选择排序:直接选择排序属于选择排序的一种,它的排序速度要比冒泡排序快一些,也是常用的排序算法。
基本思想:将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换。
算法实例:
/** * 直接选择排序算法实例 */public class Demo2 { public static void main(String[] args) { int array[]={22,45,85,1,2,0,32}; Demo2 demo2=new Demo2(); demo2.sort(array); //调用后面的排序方法 } /** * 直接选择排序 * * @param array * 要排序的数组 */ public void sort(int[] array){ int index; for(int i=1 ; iarray[index]){ index=j; //找出本次循环数组中最大的元素的位置 } } //交换在位置array.length-i和index(最大值)上的两个元素 int temp=array[array.length-i]; array[array.length-i]=array[index]; array[index]=temp; } showArray(array); } /** * 显示数组胡所有元素 * * @param array * 要显示的数组 */ public void showArray(int[] array){ for(int i:array){ System.out.print(">"+i); } System.out.println(); }}
运行结果:
将直接选择排序算法与冒泡排序算法相比较,我们可以看出,冒泡排序是交换满足条件的相邻元素值,而直接选择排序则是先找大最大(或最小)元素值的位置,然后与相应位置的元素进行交换。
四)反转排序:顾名思义,反转排序就是以相反的顺序把原数组的内容进行重新排序。
基本思想:把数组最后一个元素与第一个元素进行替换,倒数第二个与第二个元素进行替换,以此类推,直到把所有元素反转替换。
算法实例:
/** * 反转排序算法实例 */public class Demo2 { public static void main(String[] args) { int array[]={1,2,3,4,5,6,7,8,9,10}; Demo2 demo2=new Demo2(); demo2.sort(array); } /** * 反转排序 * * @param array * 要排序的数组 */ public void sort(int[] array){ System.out.println("数组原有内容:" ); showArray(array); int temp; int len=array.length; for(int i=0; i
运行结果:
最后,需要注意的是,数组的下标都是从0开始的,最后一个元素的表示总是“数组名.length-1”。
转载地址:http://sbirn.baihongyu.com/