📅  最后修改于: 2023-12-03 15:31:33.889000             🧑  作者: Mango
Java是一个强大的面向对象编程语言,并且有很多内置的排序算法来对数组和列表进行排序。在本文中,我们将介绍Java中的一些排序算法。
Java提供了一些内置的排序方法,例如:Arrays.sort()
和Collections.sort()
。
Arrays.sort()
是用来对Java数组进行排序的方法。它可以用来对基本数据类型数组和对象数组进行排序。
以下是基本数据类型数组的排序示例:
int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));
输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
以下是对象数组(按照某一属性)排序的示例:
Person[] persons = {new Person("Tom", 25), new Person("Jerry", 30), new Person("Alice", 20)};
Arrays.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return Integer.compare(o1.getAge(), o2.getAge());
}
});
System.out.println(Arrays.toString(persons));
输出结果为:[Person{name='Alice', age=20}, Person{name='Tom', age=25}, Person{name='Jerry', age=30}]
Collections.sort()
是用来对Java集合进行排序的方法。它可以用来对List、Set和Map等集合进行排序。
以下是List集合的排序示例:
List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5));
Collections.sort(numbers);
System.out.println(numbers);
输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
以下是Map集合(按照value)排序的示例:
Map<String, Integer> map = new HashMap<>();
map.put("Tom", 25);
map.put("Jerry", 30);
map.put("Alice", 20);
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return Integer.compare(o1.getValue(), o2.getValue());
}
});
System.out.println(list);
输出结果为:[Alice=20, Tom=25, Jerry=30]
除了Java内置的排序方法,我们还可以使用一些常用的排序算法来对数组和列表进行排序。以下是Java中常用的排序算法:
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就将它们交换过来。走访数列的工作是重复地进行直到没有再需要交换。
以下是冒泡排序的示例:
int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = 0; j < numbers.length - i - 1; j++) {
if (numbers[j] > numbers[j + 1]) {
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(numbers));
输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
选择排序是一种简单的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
以下是选择排序的示例:
int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
for (int i = 0; i < numbers.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[j] < numbers[minIndex]) {
minIndex = j;
}
}
int temp = numbers[i];
numbers[i] = numbers[minIndex];
numbers[minIndex] = temp;
}
System.out.println(Arrays.toString(numbers));
输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
以下是插入排序的示例:
int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
for (int i = 1; i < numbers.length; i++) {
int key = numbers[i];
int j = i - 1;
while (j >= 0 && numbers[j] > key) {
numbers[j + 1] = numbers[j];
j--;
}
numbers[j + 1] = key;
}
System.out.println(Arrays.toString(numbers));
输出结果为:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
以上是Java中的一些排序算法和排序方法。对于小数据量的排序,使用内置的排序方法是最为方便和快捷的;对于大数据量的排序,我们可以使用常用的排序算法来更加高效地进行排序。