JAVA中sort()函数的使用方法的个人总结

1.sort()函数的基本格式(默认排序为升序排序)

Arrays.sort(int[] a, int fromIndex, int toIndex);Arrays.sort(数组名,起始下标,终止下标);

一个简单的排序例子

import java.util.Arrays;
import java.util.Scanner;
import java.util.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc= new Scanner(System.in);
		int n=sc.nextInt();
		int[] a= new int[10001];
		for(int i=0;i<n;i++){
			a[i]=sc.nextInt();
		}
		Arrays.sort(a,0,n);
		for(int i=0;i<n;i++){
			if(i==n-1){
				System.out.println(a[i]);
			}
			else{
				System.out.print(a[i]+" ");
			}
		}
	}

}

2.如果一个数组初始化时已经赋值。则sort函数可以另外一种格式

Arrays.sort(数组名);

ex:

    import java.util.*;  
    import java.util.Arrays;  
    public class Main {  
        public static void main(String[] args) {  
              
            Scanner sc=new Scanner(System.in);  
                int num[]= {5,4,3,2,1};                    
                Arrays.sort(num);                    
                for(int i=0;i<5;i++)  
                {  
                    System.out.println(num[i]);  
                      
                }  
          
      
        }  
    }  

cmp函数的格式:   int compare(Object o1, Object o2);

我们可以看到,传入函数的是java中的类(java中没有结构体)

这时,sort函数的格式变为:  Arrays.sort(数组名, 起始下标, 终止下标, new cmp());

 

 

怎么自定义排序呢?
基本方法

int compare(Object o1, Object o2) 返回一个基本类型的整型
如果要按照升序排序,
则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序
 则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)

 

举个例子。-----输入n个数,然后降序排序。

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

class shu{
	int x;
}
class cmp implements Comparator<shu>{
	public int compare(shu a,shu b){
		if(a.x<b.x){
			return 1;
		}
		else if(a.x>b.x){
			return -1;
		}
		else{
			return 0;
		}
		//可以简化成
		//return b.x-a.x
	}
}
public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		shu num[] = new shu[100];
		for(int i=0;i<n;i++){
			num[i]=new shu();    ///这个地方容易漏  
			num[i].x=sc.nextInt();
		}
		
		Arrays.sort(num,0,n,new cmp());
		
		for(int i=0;i<n;i++){
			if(i==n-1){
				System.out.println(num[i].x);  
			}
			else{
				System.out.print(num[i].x+" ");  
			}			
		}
		sc.close();
}
	}

下面是一个变式,大体意思是输入一个字符串(名字),接着两个整数,可以代表成绩,首先按X排序,若相同,再看y,根据y排序,最后输出名字与两个成绩。

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

class shu{
	String name;
	int x;
	int y;
}
class cmp implements Comparator<shu>{
	public int compare(shu a,shu b){
		if(a.x<b.x){
			return 1;
		}
		else if(a.x>b.x){
			return -1;
		}
		else{
			if(b.y>a.y){
				return 1;
			}
			else if(b.y<a.y){
				return -1;
			}
			else{
				return 0;
			}
		}
	}
}
public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		shu num[] = new shu[100];
		for(int i=0;i<n;i++){
			num[i]=new shu();
			num[i].name=sc.next();
			num[i].x=sc.nextInt();
			num[i].y=sc.nextInt();
		}
		
		Arrays.sort(num,0,n,new cmp());
		
		for(int i=0;i<n;i++){
				System.out.println(num[i].name+":"+num[i].x+" "+num[i].y);  
		}
		sc.close();
}
	}

对名字按字母排序时可以用到的:

import java.text.CollationKey;
import java.text.Collator;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Locale;
import java.util.Scanner;

class shu{
	String name;
	int g;
}
class cmp implements Comparator<shu>{
	public int compare(shu a,shu b){
		if(b.g==a.g){
			 Collator collator = Collator.getInstance(Locale.ENGLISH);
			 CollationKey key1 = collator.getCollationKey(a.name);
			 CollationKey key2=collator.getCollationKey(b.name);
			 return key1.compareTo(key2);
//			int temp=b.name.charAt(0)-a.name.charAt(0);
//			return -temp;
		}
		else return b.g-a.g;
	}
}
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		shu[] a=new shu[100];
		for(int i=0;i<n;i++){
			a[i]=new shu();
			a[i].name=sc.next();
			a[i].g=sc.nextInt();
		}
		Arrays.sort(a,0,n,new cmp());
		for(int i=0;i<n;i++){
			System.out.println(a[i].name+";"+a[i].g);
		}
	}

}

排序重点:

  • 23
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值