C++中提供了sort函数,可以让程序员轻松地调用排序算法,JAVA中也有相应的函数。
1.基本元素排序:Array.sort(排序数组名)
package test;
import java.util.*;
public class main
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
int a[];
int i;
a=new int[5];
for (i=0;i<=4;i++)
{
a[i]=cin.nextInt();
}
Arrays.sort(a);
for (i=0;i<=4;i++)
{
System.out.println(a[i]+" ");
}
}
}
2.基本元素从大到小排序:
由于要用到sort中的第二个参数,这个参数是一个类,所以应该用Integer,而不是int。可以使用Interger.intvalue()获得其中int的值
下面a是int型数组,b是Interger型的数组,a拷贝到b中,方便从大到小排序。capare中返回值是1表示需要交换。
package test;
import java.util.*;
class Mycomparator implements Comparator<Integer>
{
public int compare(Integer a,Integer b)
{
if (a>b)
{
return -1;
}
else if (a<b)
{
return 1;
}
return 0;
}
}
public class main
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
int a[];
Integer b[];
int i;
a=new int[5];
b=new Integer[5];
for (i=0;i<=4;i++)
{
a[i]=cin.nextInt();
b[i]=new Integer(a[i]);
}
Comparator<Integer> cmp=new Mycomparator();
Arrays.sort(b,cmp);
for (i=0;i<=4;i++)
{
System.out.println(b[i].intValue()+" ");
}
}
}
3.类排序。
和2差不多,都是重载比较器,以下程序实现了点的排序,其中x小的拍前面,x一样时y小的排前面
package test;
import java.util.*;
class point
{
int x,y;
public String toString()
{
return "x="+x+" "+"y="+y;
}
}
class pointComparator implements Comparator<point>
{
public int compare(point a,point b)
{
if (a.x>b.x)
{
return 1;
}
else if (a.x<b.x)
{
return -1;
}
else
{
if (a.y>b.y)
{
return 1;
}
else if (a.y<b.y)
{
return -1;
}
}
return 0;
}
}
public class main
{
public static void main (String[] args)
{
Scanner cin=new Scanner(System.in);
int i,b;
point a[]=new point[5];
for (i=0;i<=4;i++)
{
a[i]=new point();
a[i].x=cin.nextInt();
a[i].y=cin.nextInt();
}
Comparator<point> cmp=new pointComparator();
Arrays.sort(a,cmp);
for (i=0;i<=4;i++)
{
System.out.println(a[i]);
}
}
}
4.区间排序
如果只希望对数组中的一个区间进行排序,那么就用到sort中的第二个和第三个参数sort(a,p1,p2,cmp),表示对a数组的[p1,p2)(注意左闭右开)部分按cmp规则进行排序