递归与分治法实现快速排序算法,输入一串以英文字符逗号隔开的数字,按升序排列法实现快速排序算法。利用java语言来编写
时间: 2024-09-27 19:11:29 浏览: 63
C语言用分治法实现数组归并排序算法实现
递归与分治法是快速排序算法的基础思想。首先,我们将字符串分割成一个个数字,然后对每个数字列表应用快速排序的过程。以下是使用Java实现的简单版本:
```java
import java.util.Arrays;
import java.util.Scanner;
public class QuickSort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一串以英文字符逗号隔开的数字:");
String input = scanner.nextLine();
int[] numbers = parseNumbers(input);
quickSort(numbers, 0, numbers.length - 1);
System.out.println("排序后的数组: " + Arrays.toString(numbers));
}
// 分割字符串并转换为整数数组
private static int[] parseNumbers(String str) {
return str.split(",", -1).stream().mapToInt(Integer::parseInt).toArray();
}
// 快速排序函数
private static void quickSort(int[] 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(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; // 返回基准的新位置
}
// 交换两个元素的值
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
运行此程序,它会提示用户输入一组用逗号分隔的数字,然后按照升序进行排序。
阅读全文