本文目录导读:

我来为你提供几个Java实现数据排序的案例,包括常用排序算法和实际应用场景。
数组排序(基础案例)
import java.util.Arrays;
public class ArraySortDemo {
public static void main(String[] args) {
// 1. 基本类型数组排序
int[] numbers = {5, 2, 8, 1, 9, 3, 7, 4, 6};
System.out.println("排序前: " + Arrays.toString(numbers));
Arrays.sort(numbers);
System.out.println("排序后: " + Arrays.toString(numbers));
// 2. 字符串数组排序
String[] names = {"张三", "李四", "王五", "赵六", "孙七"};
Arrays.sort(names);
System.out.println("姓名排序: " + Arrays.toString(names));
}
}
自定义对象排序
import java.util.*;
// 定义学生类实现Comparable接口
class Student implements Comparable<Student> {
private String name;
private int age;
private double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
// 按照年龄排序
@Override
public int compareTo(Student other) {
return this.age - other.age;
}
@Override
public String toString() {
return String.format("Student{name='%s', age=%d, score=%.1f}",
name, age, score);
}
// getter方法
public String getName() { return name; }
public int getAge() { return age; }
public double getScore() { return score; }
}
public class ObjectSortDemo {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("张三", 20, 85.5));
students.add(new Student("李四", 18, 92.0));
students.add(new Student("王五", 22, 78.5));
// 1. 使用Comparable接口排序(按年龄)
Collections.sort(students);
System.out.println("按年龄排序:");
students.forEach(System.out::println);
// 2. 使用Comparator自定义排序(按成绩)
Comparator<Student> byScore =
(s1, s2) -> Double.compare(s2.getScore(), s1.getScore());
students.sort(byScore);
System.out.println("\n按成绩降序排序:");
students.forEach(System.out::println);
// 3. 多条件排序(先按年龄,再按成绩)
Comparator<Student> multiComparator =
Comparator.comparing(Student::getAge)
.thenComparing(Student::getScore);
students.sort(multiComparator);
System.out.println("\n多条件排序:");
students.forEach(System.out::println);
}
}
常用排序算法实现
import java.util.Arrays;
public class SortingAlgorithmsDemo {
// 1. 冒泡排序
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
boolean swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break; // 优化:如果没有交换,说明已经有序
}
}
// 2. 选择排序
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
}
// 交换最小元素到当前位置
int temp = arr[minIdx];
arr[minIdx] = arr[i];
arr[i] = temp;
}
}
// 3. 插入排序
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
// 4. 快速排序
public static 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);
}
}
private static 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++;
// 交换arr[i]和arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将pivot放到正确位置
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
// 5. 归并排序
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) temp[k++] = arr[i++];
while (j <= right) temp[k++] = arr[j++];
System.arraycopy(temp, 0, arr, left, temp.length);
}
public static void main(String[] args) {
// 测试各种排序算法
int[] arr1 = {64, 34, 25, 12, 22, 11, 90};
int[] arr2 = arr1.clone();
int[] arr3 = arr1.clone();
int[] arr4 = arr1.clone();
int[] arr5 = arr1.clone();
System.out.println("原始数组: " + Arrays.toString(arr1));
bubbleSort(arr1);
System.out.println("冒泡排序: " + Arrays.toString(arr1));
selectionSort(arr2);
System.out.println("选择排序: " + Arrays.toString(arr2));
insertionSort(arr3);
System.out.println("插入排序: " + Arrays.toString(arr3));
quickSort(arr4, 0, arr4.length - 1);
System.out.println("快速排序: " + Arrays.toString(arr4));
mergeSort(arr5, 0, arr5.length - 1);
System.out.println("归并排序: " + Arrays.toString(arr5));
}
}
实际应用案例:学生成绩管理系统
import java.util.*;
import java.util.stream.Collectors;
class StudentGrade implements Comparable<StudentGrade> {
private int id;
private String name;
private int chinese;
private int math;
private int english;
private int total;
public StudentGrade(int id, String name, int chinese, int math, int english) {
this.id = id;
this.name = name;
this.chinese = chinese;
this.math = math;
this.english = english;
this.total = chinese + math + english;
}
@Override
public int compareTo(StudentGrade other) {
return Integer.compare(other.total, this.total); // 按总分降序
}
@Override
public String toString() {
return String.format("%-4d %-8s 语文:%-4d 数学:%-4d 英语:%-4d 总分:%-4d",
id, name, chinese, math, english, total);
}
// getter方法
public int getId() { return id; }
public String getName() { return name; }
public int getTotal() { return total; }
public int getChinese() { return chinese; }
public int getMath() { return math; }
public int getEnglish() { return english; }
}
public class GradeSortSystem {
private List<StudentGrade> students;
public GradeSortSystem() {
this.students = new ArrayList<>();
initData();
}
private void initData() {
students.add(new StudentGrade(1001, "张三", 85, 92, 78));
students.add(new StudentGrade(1002, "李四", 92, 88, 95));
students.add(new StudentGrade(1003, "王五", 78, 85, 90));
students.add(new StudentGrade(1004, "赵六", 95, 90, 88));
students.add(new StudentGrade(1005, "孙七", 88, 76, 82));
}
// 按总分排序
public void sortByTotalScore() {
Collections.sort(students);
displayResults("按总分排序");
}
// 按单科成绩排序
public void sortBySubject(String subject) {
Comparator<StudentGrade> comparator;
switch (subject.toLowerCase()) {
case "chinese":
comparator = Comparator.comparingInt(StudentGrade::getChinese).reversed();
break;
case "math":
comparator = Comparator.comparingInt(StudentGrade::getMath).reversed();
break;
case "english":
comparator = Comparator.comparingInt(StudentGrade::getEnglish).reversed();
break;
default:
throw new IllegalArgumentException("无效科目: " + subject);
}
students.sort(comparator);
displayResults("按" + subject + "成绩排序");
}
// 使用Stream API进行排序
public void sortWithStream(String field) {
Comparator<StudentGrade> comparator;
switch (field.toLowerCase()) {
case "id":
comparator = Comparator.comparingInt(StudentGrade::getId);
break;
case "name":
comparator = Comparator.comparing(StudentGrade::getName);
break;
default:
comparator = Comparator.comparingInt(StudentGrade::getTotal).reversed();
}
List<StudentGrade> sortedList = students.stream()
.sorted(comparator)
.collect(Collectors.toList());
System.out.println("Stream API排序结果:");
sortedList.forEach(System.out::println);
System.out.println("------------------------");
}
private void displayResults(String title) {
System.out.println(title + ":");
students.forEach(System.out::println);
System.out.println("------------------------");
}
public static void main(String[] args) {
GradeSortSystem system = new GradeSortSystem();
// 原始数据
System.out.println("原始数据:");
system.sortBySubject("id"); // 按学号升序
System.out.println();
// 各种排序方式
system.sortByTotalScore();
system.sortBySubject("chinese");
system.sortBySubject("math");
system.sortBySubject("english");
System.out.println("使用Stream API排序:");
system.sortWithStream("name");
}
}
性能对比测试
import java.util.*;
public class SortPerformanceTest {
public static void main(String[] args) {
int[] sizes = {1000, 10000, 100000};
for (int size : sizes) {
System.out.println("\n=== 数组大小: " + size + " ===");
// 生成随机数据
int[] arr1 = generateRandomArray(size);
int[] arr2 = arr1.clone();
int[] arr3 = arr1.clone();
int[] arr4 = arr1.clone();
// 测试不同排序算法的性能
testSort("Arrays.sort()", () -> Arrays.sort(arr1));
testSort("冒泡排序", () -> SortingAlgorithmsDemo.bubbleSort(arr2));
testSort("快速排序", () -> SortingAlgorithmsDemo.quickSort(arr3, 0, arr3.length - 1));
testSort("归并排序", () -> SortingAlgorithmsDemo.mergeSort(arr4, 0, arr4.length - 1));
}
}
private static int[] generateRandomArray(int size) {
Random random = new Random();
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = random.nextInt(100000);
}
return arr;
}
private static void testSort(String name, Runnable sortMethod) {
long startTime = System.nanoTime();
sortMethod.run();
long endTime = System.nanoTime();
double duration = (endTime - startTime) / 1_000_000.0;
System.out.printf("%-20s: %.2f ms%n", name, duration);
}
}
选择建议:
- 数据量小(<1000):任何算法都可以
- 数据量大(>10000):使用快速排序或归并排序
- 数据基本有序:插入排序效率高
- 稳定性要求高:归并排序
- 实际开发:优先使用
Arrays.sort()或Collections.sort()
常用排序算法时间复杂度:
- 冒泡排序:O(n²)
- 选择排序:O(n²)
- 插入排序:O(n²)
- 快速排序:O(n log n)
- 归并排序:O(n log n)
- Arrays.sort():O(n log n)
这些案例涵盖了从基础到高级的排序应用,你可以根据实际需求选择合适的实现方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播