请用【java】帮我写一段快排代码,并帮我讲解下实现逻辑定义类person 属性有name age 创建Z参构造数
时间: 2024-12-14 11:15:17 浏览: 2
在 Java 中,快速排序是一种常用的排序算法,基于分治法思想。以下是使用 Java 实现快速排序的示例,包括 `Person` 类以及其属性和构造函数:
```java
// 定义 Person 类
public class Person {
private String name;
private int age;
// 使用 Z 参数化构造函数 (这里 Z 参数一般表示泛型或未知类型,这里假设是无类型)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 获取姓名和年龄的方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
// 快速排序的具体实现(这里简化了递归部分)
public static void quickSort(Person[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1); // 对左半部分进行排序
quickSort(arr, pivotIndex + 1, high); // 对右半部分进行排序
}
}
// 分区函数,返回基准元素的索引
private static int partition(Person[] arr, int low, int high) {
Person pivot = arr[high]; // 基准元素通常是数组最后一个元素
int i = (low - 1);
for (int j = low; j < high; j++) {
if (arr[j].getAge() <= pivot.getAge()) { // 按照年龄升序排列
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high); // 将基准元素放到正确的位置
return i + 1;
}
// 交换两个元素的函数
private static void swap(Person[] arr, int i, int j) {
Person temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 主程序测试
public static void main(String[] args) {
Person[] persons = {new Person("Alice", 25), new Person("Bob", 18), new Person("Charlie", 30)};
System.out.println("Before sorting:");
for (Person person : persons) {
System.out.println(person.getName() + " (" + person.getAge() + ")");
}
quickSort(persons, 0, persons.length - 1);
System.out.println("\nAfter sorting:");
for (Person person : persons) {
System.out.println(person.getName() + " (" + person.getAge() + ")");
}
}
```
在这个例子中,我们首先创建了一个 `Person` 类,包含姓名和年龄作为属性。然后定义了一个带有一个参数的构造函数,接受姓名和年龄作为输入。接着实现了快速排序算法,其中 `quickSort()` 方法递归地对数组进行排序,`partition()` 函数负责找到基准元素并将其放在正确的位置。主程序展示了如何创建一个 `Person` 数组并在排序前后的状态。
阅读全文