java中常用排序

1.对一维数组排序

1.1升序

public class Main {

	public static void main(String[] args) {
		int[] arr= {5,2,9,1,5};
		//升序
		Arrays.sort(arr);
		for(int i=0;i<5;i++) {
			System.out.print(arr[i]+" ");
		}

	}

}
1.2指定范围的升序
import java.util.Arrays;
import java.util.Scanner;

public class qq {

	public static void main(String[] args) {
		int[] arr= {5,2,9,1,5};
		//升序
		Arrays.sort(arr,1,4);  // 对索引1到3(不包含4)的元素排序 
		for(int i=0;i<5;i++) {
			System.out.print(arr[i]+" ");//5 1 2 9 5 
		}

	}

}
1.3降序 
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {

	public static void main(String[] args) {
		//必须Integer或字符串数组
		Integer[] arr= {5,2,9,1,5};
		//升序
		Arrays.sort(arr,Comparator.reverseOrder());  // 对索引1到3(不包含4)的元素排序 
		for(int i=0;i<5;i++) {
			System.out.print(arr[i]+" ");//5 1 2 9 5 
		}

	}

}

 

1.4指定范围的降序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {

	public static void main(String[] args) {
		//必须Integer或字符串数组
		Integer[] arr= {5,2,9,1,5};
		//升序
		Arrays.sort(arr,1,4,Comparator.reverseOrder());  // 对索引1到3(不包含4)的元素排序 
		for(int i=0;i<5;i++) {
			System.out.print(arr[i]+" ");//5 1 2 9 5 
		}

	}

}

2.对二维数组排序

2.1升序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {

	public static void main(String[] args) {
		//不用Integer也行
		int[][] arr = {
			    {3, 4, 3}, 
			    {1, 9, 7}, 
			    {5, 6, 8}
			};
		//升序
			//对第几个元素排序就a[j]-b[j]
			Arrays.sort(arr, (a, b) -> a[2] - b[2]);
			for(int i=0;i<3;i++) {
				for(int j=0;j<3;j++) {
					System.out.print(arr[i][j]+" ");
				}
				System.out.println();
			}

	}

}
2.2降序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {

	public static void main(String[] args) {
		//不用Integer也行
		int[][] arr = {
			    {3, 4, 3}, 
			    {1, 9, 7}, 
			    {5, 6, 8}
			};
		//降序
			//对第几个元素排序就b[j]-a[j]
			Arrays.sort(arr, (a, b) -> b[2] - a[2]);
			for(int i=0;i<3;i++) {
				for(int j=0;j<3;j++) {
					System.out.print(arr[i][j]+" ");
				}
				System.out.println();
			}

	}

}
2.3指定范围降序或升序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {

	public static void main(String[] args) {
		//不用Integer也行
		int[][] arr = {
			    {3, 4, 3}, 
			    {1, 9, 7}, 
			    {5, 6, 8},
			    {2, 5, 1},
			    {4, 3, 9}
			};

			// 对索引1到3(不包含3)的行,按第2列(索引1)降序排序
			Arrays.sort(arr, 1, 3, (a, b) -> b[2] - a[2]);
			//对索引1到3(不包含3)的行,按第2列(索引1)升序排序
			//Arrays.sort(arr, 1, 3, (a, b) -> a[2] - b[2]);

			for(int i=0;i<5;i++) {
				for(int j=0;j<3;j++) {
					System.out.print(arr[i][j]+" ");
				}
				System.out.println();
			}
			/*
			 3 4 3 
             5 6 8 
             1 9 7 
             2 5 1 
             4 3 9 
			 */
	}

}

3.对类元素排序

3.1多条件排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {
	static class Node{
		int a;
		int b;
		Node(int a,int b){
			this.a=a;
			this.b=b;
		}
	}

	public static void main(String[] args) {
		Node [] arr=new Node[4];
		arr[0]=new Node(1,3);
		arr[1]=new Node(6,4);
		arr[2]=new Node(3,4);
		arr[3]=new Node(5,1);
		//根据b升序,若b相同再根据a升序
		Arrays.sort(arr,new Comparator<Node>() {

			@Override
			public int compare(Node o1, Node o2) {
				
				int com=Integer.compare(o1.b, o2.b);
				//如果是降序就换一下
				//int com=Integer.compare(o2.b, o1.b);
				if(com!=0) {
					return com;
				}
				return Integer.compare(o1.a, o2.b);
				//如果是降序就换一下
				//return Integer.compare(o2.a, o1.b);
			}
		});
		for(int i=0;i<4;i++) {
			System.out.println(arr[i].a+" "+arr[i].b);
		}
	}

}
3.2单条件排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class qq {
	static class Node{
		int a;
		int b;
		Node(int a,int b){
			this.a=a;
			this.b=b;
		}
	}

	public static void main(String[] args) {
		Node [] arr=new Node[4];
		arr[0]=new Node(1,3);
		arr[1]=new Node(6,4);
		arr[2]=new Node(3,4);
		arr[3]=new Node(5,1);
		//根据b升序
		Arrays.sort(arr,new Comparator<Node>() {

			@Override
			public int compare(Node o1, Node o2) {
				int com=Integer.compare(o1.b, o2.b);
				//如果是降序就换一下
				//int com=Integer.compare(o2.b, o1.b);
				return com;
			}
		});
		for(int i=0;i<4;i++) {
			System.out.println(arr[i].a+" "+arr[i].b);
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值