排序算法概述
Java中實現排序可以通過多種方式,包括內置方法、自定義算法或使用第三方庫。常見的排序算法有冒泡排序、選擇排序、插入排序、快速排序、歸并排序等。
使用Arrays.sort()方法
對于數組排序,Java提供了Arrays.sort()
方法,支持對基本類型和對象數組排序。基本類型數組使用快速排序,對象數組使用歸并排序。
import java.util.Arrays;int[] arr = {5, 2, 9, 1, 5};
Arrays.sort(arr); // 升序排序
System.out.println(Arrays.toString(arr)); // 輸出 [1, 2, 5, 5, 9]
使用Collections.sort()方法
對List集合排序可以使用Collections.sort()
方法,默認按自然順序升序排列。支持自定義Comparator實現復雜排序邏輯。
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;List<Integer> list = new ArrayList<>(List.of(5, 2, 9, 1, 5));
Collections.sort(list); // 升序排序
System.out.println(list); // 輸出 [1, 2, 5, 5, 9]
自定義Comparator
需要降序或按特定字段排序時,可通過實現Comparator接口自定義排序規則。
Collections.sort(list, (a, b) -> b - a); // 降序排序
System.out.println(list); // 輸出 [9, 5, 5, 2, 1]
實現快速排序算法
快速排序是一種分治算法,平均時間復雜度為O(n log n)。以下是遞歸實現的示例:
void quickSort(int[] arr, int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;
}void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}
Java 8 Stream排序
利用Stream API可以簡潔地實現排序,支持鏈式操作和并行處理。
List<Integer> sortedList = list.stream().sorted() // 自然排序.collect(Collectors.toList());List<Integer> reverseList = list.stream().sorted(Comparator.reverseOrder()) // 降序排序.collect(Collectors.toList());
性能比較
- 小數據量:插入排序或冒泡排序可能更簡單。
- 大數據量:快速排序、歸并排序或堆排序更高效。
- 穩定性要求:歸并排序是穩定排序,相同元素相對位置不變。