使用Java函数对列表进行排序的方法
发布时间:2023-07-05 23:53:36
在Java中,可以使用不同的方法对列表进行排序。下面是一些常见的排序方法。
1. 冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法,它重复地交换相邻元素,直到整个列表排序完成。它的时间复杂度为O(n^2)。
public static void bubbleSort(List<Integer> list) {
int n = list.size();
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (list.get(j) > list.get(j+1)) {
// 交换相邻元素
int temp = list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
}
}
2. 快速排序(Quick Sort)
快速排序是一种常用的排序算法,它通过选择一个基准元素,并将列表分割成两个子列表,其中一个子列表的所有元素都小于基准元素,另一个子列表的所有元素都大于基准元素。然后递归地对两个子列表进行排序,直到整个列表排序完成。快速排序的时间复杂度为O(nlogn)。
public static void quickSort(List<Integer> list, int low, int high) {
if (low < high) {
int pi = partition(list, low, high);
quickSort(list, low, pi-1);
quickSort(list, pi+1, high);
}
}
public static int partition(List<Integer> list, int low, int high) {
int pivot = list.get(high);
int i = low-1;
for (int j = low; j < high; j++) {
if (list.get(j) < pivot) {
i++;
// 交换元素
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
// 交换基准元素
int temp = list.get(i+1);
list.set(i+1, list.get(high));
list.set(high, temp);
return i+1;
}
3. 归并排序(Merge Sort)
归并排序是一种分治排序算法,它将列表分成两个子列表,然后对这两个子列表分别进行排序,最后将两个有序的子列表合并成一个有序列表。归并排序的时间复杂度为O(nlogn)。
public static void mergeSort(List<Integer> list) {
if (list.size() > 1) {
int mid = list.size() / 2;
List<Integer> left = new ArrayList<>(list.subList(0, mid));
List<Integer> right = new ArrayList<>(list.subList(mid, list.size()));
mergeSort(left);
mergeSort(right);
merge(list, left, right);
}
}
public static void merge(List<Integer> list, List<Integer> left, List<Integer> right) {
int i = 0;
int j = 0;
int k = 0;
while (i < left.size() && j < right.size()) {
if (left.get(i) < right.get(j)) {
list.set(k, left.get(i));
i++;
} else {
list.set(k, right.get(j));
j++;
}
k++;
}
while (i < left.size()) {
list.set(k, left.get(i));
i++;
k++;
}
while (j < right.size()) {
list.set(k, right.get(j));
j++;
k++;
}
}
4. 插入排序(Insertion Sort)
插入排序是一种简单的排序算法,它通过构建有序序列,将未排序的元素逐个插入到有序序列中的适当位置。插入排序的时间复杂度为O(n^2)。
public static void insertionSort(List<Integer> list) {
int n = list.size();
for (int i = 1; i < n; i++) {
int key = list.get(i);
int j = i - 1;
while (j >= 0 && list.get(j) > key) {
list.set(j + 1, list.get(j));
j = j - 1;
}
list.set(j + 1, key);
}
}
以上是四种常见的排序方法,根据具体需求选择适合的算法进行列表排序。
