编写程序运行后用户输入4位。整数作为年份,判断其是否为闰年,如果年份能被400整除,则为闰年,如果年份能被四整除,但不能被100整除,也为闰年。请用【java】帮我写一段快排代码,并帮我讲解下实现逻辑
时间: 2024-10-04 11:02:52 浏览: 68
在Java中,我们可以编写一个简单的函数来判断闰年的条件,然后利用快速排序算法对年份数组进行排序。这里是一个基本的示例:
```java
import java.util.Arrays;
import java.util.Scanner;
public class LeapYearSort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一组四位数的年份,用逗号分隔:");
String input = scanner.nextLine();
String[] years = input.split(",");
int[] yearArray = new int[years.length];
for (int i = 0; i < years.length; i++) {
yearArray[i] = Integer.parseInt(years[i]);
}
quickSort(yearArray, 0, yearArray.length - 1);
// 判断并打印闰年
for (int num : yearArray) {
if (isLeapYear(num)) {
System.out.printf("%d is a leap year.\n", num);
}
}
}
// 快速排序函数
public static void quickSort(int[] array, int low, int high) {
if (low < high) {
int pivotIndex = partition(array, low, high); // 分区操作
quickSort(array, low, pivotIndex - 1); // 对左半部分递归排序
quickSort(array, pivotIndex + 1, high); // 对右半部分递归排序
}
}
// 判断是否为闰年的辅助函数
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 快速排序的分区操作
private static int partition(int[] array, int low, int high) {
int pivot = array[high]; // 选择最后一个元素作为基准
int i = low - 1;
for (int j = low; j < high; j++) {
if (array[j] <= pivot) { // 将小于或等于基准的元素放到左边
i++;
swap(array, i, j);
}
}
swap(array, i + 1, high); // 将基准放到正确的位置
return i + 1;
}
// 交换两个元素的函数
private static void swap(int[] array, int index1, int index2) {
int temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
}
```
**实现逻辑:**
1. 用户首先输入一组四位数的年份。
2. 读取输入并将字符串转换为整数数组。
3. 使用快速排序(`quickSort`)算法将年份数组从小到大排列。
4. 遍历排序后的数组,对于每个年份调用`isLeapYear`函数检查是否为闰年。
5. 根据判断结果输出相应的信息。
**相关问题--:**
1. 快速排序的基本思想是什么?
2. `partition`函数在快速排序中的作用是什么?
3. 如果输入的年份中有负数,上述代码会如何处理?
阅读全文