Java函数-快速排序算法的实现方法
发布时间:2023-06-30 20:58:04
快速排序是一种常见的排序算法,它使用分治法(Divide and Conquer)的思想来将一个大问题分解为多个小问题,并逐步解决这些小问题,最终达到整体解决的效果。
快速排序的基本思想是选取一个基准元素(通常是列表的 个元素),将列表分成两部分,使得小于基准元素的元素位于基准元素的左边,大于基准元素的元素位于基准元素的右边。然后递归地对左右两部分进行排序,直到整个列表有序。
以下是快速排序的Java实现方法:
public class QuickSort {
public 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);
}
}
public static int partition(int[] arr, int low, int high) {
// 选取 个元素作为基准元素
int pivot = arr[low];
while (low < high) {
// 从右向左找到 个小于基准元素的元素
while (low < high && arr[high] >= pivot) {
high--;
}
// 将找到的元素移到基准元素的左边
arr[low] = arr[high];
// 从左向右找到 个大于基准元素的元素
while (low < high && arr[low] <= pivot) {
low++;
}
// 将找到的元素移到基准元素的右边
arr[high] = arr[low];
}
// 将基准元素放到最终位置
arr[low] = pivot;
// 返回基准元素的索引
return low;
}
public static void main(String[] args) {
int[] arr = {5, 9, 3, 1, 8, 6, 2, 7, 4};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
以上代码中,quickSort函数是快速排序的入口函数,它接受一个整型数组 arr,以及列表的起始索引 low 和结束索引 high,表示待排序的部分列表。在 quickSort 函数中,首先判断基准元素左右两边是否还有元素需要排序,如果有,则调用 partition 函数来获取基准元素的索引,并递归地对左右两部分进行排序。
partition 函数是快速排序的核心函数,它接受一个整型数组 arr,以及列表的起始索引 low 和结束索引 high,它会选取 个元素作为基准元素,然后使用双指针的思想来将小于基准元素的元素移到左边,大于基准元素的元素移到右边,最终将基准元素放到最终位置,并返回基准元素的索引。
在 main 函数中,我使用一个例子来验证快速排序算法的正确性。将待排序列表初始化为 {5, 9, 3, 1, 8, 6, 2, 7, 4},然后调用 quickSort 函数对列表进行排序,并输出排序后的结果。
快速排序的时间复杂度为 O(nlogn),其中 n 是列表的长度。由于是原地排序,所以空间复杂度为 O(logn)。相对于其他排序算法,快速排序具有较好的性能。
