使用Java Arrays类进行数组排序

排序算法,基本的高级语言都有一些提供。C语言有 qsort()函数,C++有 sort()函数,java语言有 Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。

Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。


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 型数组的指定范围按数字升序进行排序。 

  代码实例:

package _10Arrays类提供的两个排序方法;

import java.util.Arrays;

public class _01基本数据类型数组的sort方法 {

	public static void main(String[] args) {

//		int[] a = { 1, 4, -1, 5, 0 };
		char[] a = {'b', 'd', 'c', 'e', 'a'};
		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 _10Arrays类提供的两个排序方法;

import java.util.Arrays;
import java.util.Comparator;

class Node{
	private int key;
	private int value;
	public Node(int key, int value){
		this.key = key;
		this.value = value;
	}
	public int getKey() {
		return key;
	}
	public int getValue() {
		return value;
	}
	@Override
	public String toString() {
		return this.key + "-" + this.value;
	}
}

class NodeComparator implements Comparator{

	@Override
	public int compare(Node o1, Node o2) {
//		return o1.getKey()-o2.getKey()>0?1:o1.getKey()-o2.getKey()<0?-1:0;
		return o1.getValue()-o2.getValue()>0?1:o1.getValue()-o2.getValue()<0?-1:0;
	}	
}

public class _02对实现Comparator接口的对象排序 {

	public static void main(String[] args) {
		Node[] array = new Node[4];
		for (int i = 0; i < array.length; i++) {
//			array[i] = new Node(array.length-i, i);
			array[i] = new Node(i+1, array.length-i);
		}
		System.out.println("before sort");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		Arrays.sort(array, new NodeComparator());
		System.out.println("after sort");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}
}

你可能感兴趣的:(Java,数据结构和算法)