1.对基本数据类型的数组的排序
(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;
(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。
(3)要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组,如Integer[],Double[],Character[]等,对这些类数组进行排序。(其实还不如先进行升序排序,自己在转为降序)。
用默认的升序对数组排序
函数原型:
- static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。
- static void sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。
代码实例
import java.util.Arrays;
public class ArraysSort_11 {
public static void main(String args[])
{
int[] a={1,4,-1,5,0};
Arrays.sort(a);
//数组a[]的内容变为{-1,0,1,4,5}
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
}
2.对复合数据类型的数据的排序
函数原型:
(1)public static void sort(T[] a,Comparator c) 根据指定比较器产生的顺序对指定对象数组进行排序。
(2)public static void sort(T[] a,int fromIndex,int toIndex,Comparator c) 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。
说明:这个两个排序算法是“经过调优的合并排序”算法。
代码实例
package com.shuzu;
import java.util.Arrays;
import java.util.Comparator;
public class fuhepaixu {
Point[] arr;
fuhepaixu(){
arr =new Point[4];
for(int i=0;i<4;i++) {
arr[i]=new Point();
}
}
public static void main(String args[]) {
fuhepaixu f =new fuhepaixu();
f.arr[0].x=1;
f.arr[1].x=2;
f.arr[2].x=0;
f.arr[3].x=4;
f.arr[0].y=2;
f.arr[1].y=3;
f.arr[2].y=1;
f.arr[3].y=0;
Arrays.sort(f.arr,new myComparator());
for(int j=0;j<4;j++) {
System.out.println("("+f.arr[j].x+","+f.arr[j].y+")");
}
}
}
class Point{
int x;
int y;
}
class myComparator implements Comparator{
public int compare(Object arg0,Object arg1) {
Point t1 =(Point)arg0;
Point t2 =(Point)arg1;
if(t1.x!=t2.x) {
return t1.x>t2.x?1:-1;
}
else {
return t1.y>t2.y?1:-1;
}
}
}
Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。Comparator体现了一种策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
PS:关于?:公式
a>b?A:B
意思是如果a>b则这个式子的值为A;
否则值为B