java数组降序和升序排序例子

作者:袖梨 2022-11-14


java.util.Arrays 类中提供了几个静态方法用来对数组进行排序。例如:使用Arrays.sort(),然后将数组作为参数传入,然后返回排序完的数组。java中,我们也可以使用升序或降序,或者是自定义comparator来进行排序。

对java数组进行升序排序

对数组(String,int等类型)进行升序排序,我们可以直接使用Arrays.sort()方法,该方法会默认根据CompareTo方法实现的自然顺序(natral order)进行升序排序。所谓自然顺序,如对于String类型,根据字母表进行排序,对于整数类型,则按数字的大小进行排序。我们也可以使用该方法对匿名数组进行排序,不过这并没哟什么实际意义。

对java数组进行降序排序

为了对java数组实现降序排序,你需要提供一个外部的Comparator
来对元素按相反的顺序排序。不过,java的api中给我们提供了这样java.util.Collections.reverseOrder()方法,该方法返回一个与自然顺序相反的comparator。将这个comparator作为参数传给sort方法,就可以实现降序排序了。当然也可以先将数组转换为ArrayList,然后调用ArrayList的reverse()方法,再转换为数组。不过最好还是使用Arrays.sort()方法。

对java数组中的子数组进行排序

Arrays类提供了对数组的部分元素进行排序的方法。例如,你可能有一个很多的数组,而你只需要对于特定的一段进行排序,那么可以使用java.util.Arrays.sort(array,index,index) ,它只会对指定范围内的元素进行排序。这比对整个数组进行排序要快。

下面贴出完整的代码:

import java.util.Arrays;
import java.util.Collections;

public class HashtableDemo {

public static void main(String args[]) {
String[] companies = { "Google", "Apple", "Sony" };

// sorting java array in ascending order
System.out.println("Sorting String Array in Ascending order in Java Example");
System.out.println("Unsorted String Array in Java: ");
printNumbers(companies);
Arrays.sort(companies);
System.out.println("Sorted String Array in ascending order : ");
printNumbers(companies);

// sorting java array in descending order
System.out.println("Sorting Array in Descending order in Java Example");
System.out.println("Unsorted int Array in Java: ");
printNumbers(companies);
Arrays.sort(companies, Collections.reverseOrder());
System.out.println("Sorted int Array in descending order : ");
printNumbers(companies);

System.out.println("Sorting part of array in java:");
int[] numbers = { 1, 3, 2, 5, 4 };
Arrays.sort(numbers, 0, 3);
System.out.println("Sorted sub array in Java: ");
for (int num : numbers) {
System.out.println(num);
}

}

public static void printNumbers(String[] companies) {
for (String company : companies) {
System.out.println(company);
}
}

}

Output:
Sorting String Array in Ascending order in Java Example
Unsorted String Array in Java:
Google
Apple
Sony

Sorted String Array in ascending order :
Apple
Google
Sony

Sorting Array in Descending order in Java Example
Unsorted int Array in Java:
Apple
Google
Sony
Sorted String Array in descending order :
Sony
Google
Apple
Sorting part of array in java:
Sorted sub array in Java:

1
2
3
5
4

关于Arrays.sort()方法的重要点:

1.Arrays.sort()是一个重载的方法。可以对int,byte,short,char或这Object[]数组进行排序。
2.Arrays.sort()也可以数组的子数组进行排序
3.Arrays类还提供了其他一些工具方法,如binarySearch折半查找对数组进行查找

例子

用默认的升序对数组排序

   函数原型:static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。

       static void sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。 

代码实例:


import java.util.Arrays;
public class ArraysSort_11 {
public static void main(String args[])
{
int[] a={1,4,-1,5,0};
Arrays.sort(a);
//数组a[]的内容变为{-1,0,1,4,5}
for(int i=0;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 aa;

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

public class Arraysort {
Point[] arr;

Arraysort(){
arr=new Point[4]; //定义对象数组arr,并分配存储的空间
for(int i=0;i<4;i++)
arr[i]=new Point();
}

public static void main(String[] args) {

Arraysort sort=new Arraysort();
sort.arr[0].x=2;sort.arr[0].y=1; //初始化,对象数组中的数据
sort.arr[1].x=2;sort.arr[1].y=2;
sort.arr[2].x=1;sort.arr[2].y=2;
sort.arr[3].x=0;sort.arr[3].y=1;

Arrays.sort(sort.arr, new MyComprator()); //使用指定的排序器,进行排序
for(int i=0;i<4;i++) //输出排序结果
System.out.println("("+sort.arr[i].x+","+sort.arr[i].y+")");
}
}

class Point{
int x;
int y;
}

//比较器,x坐标从小到大排序;x相同时,按照y从小到大排序
class MyComprator implements Comparator {
public int compare(Object arg0, Object arg1) {
Point t1=(Point)arg0;
Point t2=(Point)arg1;
if(t1.x != t2.x)
return t1.x>t2.x? 1:-1;
else
return t1.y>t2.y? 1:-1;
}
}

相关文章

精彩推荐