Java Arrays.sort相关用法与重载

Java Arrays.sort()

Java中的数组排序函数,

头文件
import java.util.Arrays;

相关API
Arrays.sort(arys[])
Arrays.sort(arys[],int from,int to)   //排序范围:from-->to-1
Arrays.sort(arys[],new MyComparator())
Arrays.sort(arys[],int from,int to,new MyComparator())
sort重载
例如存在定义
private static class node{
        int x,y;
    };

可以利用Comparator接口实现不同的排序效果

//将x从大到小排,如果相同,就将y从大到小排
private static class cmp1 implements Comparator<node>{
       @Override
       public int compare(node a,node b){
            if(a.x == b.x){
                            if(a.y==b.y) return 0;
                            return a.y<b.y?1:-1;
                    }
                if(a.x==b.x) return 0;
                return a.x<b.x?1:-1;
          }
    }
//将x从小到大排,如果相同,就将y从小到大排
private static class cmp2 implements Comparator<node>{
       @Override
       public int compare(node a,node b){
            if(a.x == b.x){
                            if(a.y==b.y) return 0;
                            return a.y>b.y?1:-1;
                    }
                if(a.x==b.x) return 0;
                return a.x>b.x?1:-1;
          }
    }
相关的实现原理,可以这么理解:
Arrays中封装的sort函数默认是从小到大排序的,我们在cmp1中在a.y<b.y时返回1,a.y>b.y>时返回-1。
使得程序认为y值越小代表这个node对象越大,而程序是默认把对象大的放在数组>后面,此时它把小的当成了大的,因此我们实现了数组的从大到小的排序。
sort的时间复杂度

Arrays.sort()使用了归并排序算法,时间复杂度为O(nlogn)

练习:

一道贪心题,需要用到排序:http://www.cnblogs.com/zsyacm666666/p/6656859.html

posted @ 2017-04-01 17:53  江南何采莲  阅读(2293)  评论(0编辑  收藏  举报