Sort

Nannan Lv5

Sort

1.Array.sort()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main {
public static void main(String[] args) throws Exception {
BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
int[]a = {9,8,7,6,5,4,3,2,1,0};
Arrays.sort(a,0,a.length);
for(int i = 0;i < a.length; i++)
cout.write(a[i]+" ");
cout.close();
}
}

2.自定义排序

方法一: 创建实现Comparator接口的类/匿名内部类(推荐)

Arrays.sort(T[] a, Comparator<? Super T> c)用Comparator接口实现自定义排序规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
public static void main(String[] args) throws Exception {
BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
//不能用基本数据类型,这里要用引用类型
Integer[]a = {1,2,7,6,5,4,3,2,9,0};
//降序
Arrays.sort(a,new Comparator<Integer>(){
//重新compare方法
public int compare(Integer a,Integer b){
//返回值>0交换
return b-a;
}
});

for(int i = 0;i < a.length; i++)
cout.write(a[i]+" ");
cout.close();
}
}

输出:

1
9 7 6 5 4 3 2 2 1 0 

样例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
public static void main(String[] args) throws Exception{
StreamTokenizer cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));

//注意要用Integer,如果不用自定义排序,用它原本的,用int就行了
Integer[] arr = new Integer[10];

for (int i = 0; i < 10; i++) {
cin.nextToken();
arr[i] = (int) cin.nval;
}
Arrays.sort(arr,0,5, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});

for(int i = 0;i < 10; i++)
{
cout.write(arr[i]+" ");
}
cout.close();

}
}

方法二:基于Comparator构建Lambda 表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
public static void main(String[] args) throws Exception {
BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
//不能用基本数据类型,这里要用引用类型
Integer[]arr = {0,1,2,3,4,5,6,7,8};
//降序
Arrays.sort(arr,(a,b)->{
return b - a;
});

for(int i = 0;i < arr.length; i++)
cout.write(arr[i]+" ");
cout.close();
}
}

输出:

1
8 7 6 5 4 3 2 1 0 

方法三:重新实现Comparator接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception{
BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
Integer[] arr = {5,4,7,9,2,12,54,21,1};
//降序
//重新实现Comparator接口
Arrays.sort(arr, new cmp());
cout.write(Arrays.toString(arr));
cout.close();
}
}

class cmp implements Comparator<Integer>{
public int compare(Integer o1, Integer o2) {
// A.compareTo(B) A>B 返回1,A=B 返回0,A<B 返回-1
// compareTo()返回值>0就交换
// 如果o2 > o1 就交换 =>降序
return o2.compareTo(o1);
}
}

输出:

1
[54, 21, 12, 9, 7, 5, 4, 2, 1]
  • Title: Sort
  • Author: Nannan
  • Created at : 2024-03-15 17:54:00
  • Updated at : 2024-09-30 20:58:51
  • Link: https://redefine.ohevan.com/2024/03/15/六、sort/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments