java数组排序函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值