刷题过程中常常遇到排序问题,Java中自带的sort方法可以非常方便的帮助我们进行排序。
常见的排序问题有两种情形:
1.对一个数组进行排序。
2.对自定义类型的类进行排序。
一,对数组进行排序:
通常情况下我们可以使用Array.sort()来对数组进行排序,有以下3种情况:
1.Array.sort(int[] a)
直接对数组进行升序排序
2.Array.sort(int[] a , int fromIndex, int toIndex)
对数组的从fromIndex到toIndex进行升序排序,注意这是左闭右开的
3.新建一个comparator从而实现自定义比较
具体方法如下:
import java.util.*;
public class no {
public static void main(String []args)
{
int[] ints=new int[]{2,324,4,57,1};
System.out.println("增序排序后顺序");
Arrays.sort(ints);
for (int i=0;i<ints.length;i++)
{
System.out.print(ints[i]+" ");
}
System.out.println("\n减序排序后顺序");
//要实现减序排序,得通过包装类型数组,基本类型数组是不行滴
//倒过来是大顶堆
Integer[] integers=new Integer[]{2,324,4,4,6,1};
Arrays.sort(integers, new Comparator<Integer>()
{
@Override
public int compare(Integer o1, Integer o2)
{
return o2-o1;
}
public boolean equals(Object obj)
{
return false;
}
});
for (Integer integer:integers)
{
System.out.print(integer+" ");
}
System.out.println("\n对部分排序后顺序");
int[] ints2=new int[]{212,43,2,324,4,4,57,1};
//对数组的[2,6)位进行排序
Arrays.sort(ints2,2,6);
for (int i=0;i<ints2.length;i++)
{
System.out.print(ints2[i]+" ");
}
}
}
二,对自定义类进行排序
当我们处理自定义类型的排序时,一般将自定义类放在List种,之后再进行排序
一般我们对自定义类型数据进行重写Comparator来进行对数据进行比较
具体方法如下:
public static class Adam
{
int ID ;
int val ;
String name ;
Adam(int ID , String name , int val)
{
this.ID = ID ;
this.name = name ;
this.val = val ;
}
}
Collections.sort(list, new Comparator<Object>(){ //我们希望对自定义Adam中的ID进行排序
public int compare(Object a , Object b)
{
Adam student1 = (Adam)a ;
Adam student2 = (Adam)b ;
return student1.ID - student2.ID ;
}
});
Arrays.sort(int[])都是基于比较的排序的示例,因此必须具有最坏情况的复杂度Ω(n log n)
三. Arrays.fill()
用法1:接受2个参数
Arrays.fill( a1, value );
注:a1是一个数组变量,value是一个a1中元素数据类型的值,作用:填充a1数组中的每个元素都是value
例如:
boolean[] a1 = new boolean[5];
Arrays.fill( a1,true );
结果 a1[] = {true,true,true,true,true};
用法2:接受4个参数
例如:
String[] a9 = new String[6];
Arrays.fill(a9, “Hello”);
Arrays.fill(a9, 3, 5,“World”);
结果是 a9[] = {Hello,Hello,Hello,World,World,Hello};
第一个参数指操作的数组,第二个和第三个指在该数组的某个区域插入第四个参数,第二个参数指起始元素下标(包含该下标),第三个参数指结束下标(不包含该下标),注意:java的数组下标从0开始