使用Java Arrays类进行数组排序

来源:互联网 发布:矩阵正交化有什么用 编辑:程序博客网 时间:2024/05/16 15:55
排序算法,基本的高级语言都有一些提供。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<T> void sort(T[] a,Comparator c)  根据指定比较器产生的顺序对指定对象数组进行排序。

        (2)public static<T> 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;}@Overridepublic String toString() {return this.key + "-" + this.value;}}class NodeComparator implements Comparator<Node>{@Overridepublic 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]);}}}

0 0
原创粉丝点击