快速排序法 Java 实现
介绍
快速排序(Quick Sort)是一种常用的排序算法,它的基本思想是通过分治法将一个大问题分解为多个小问题,并逐步解决这些小问题。快速排序的平均时间复杂度为O(nlogn),是一种高效的排序算法。
在本文中,我将介绍如何使用Java实现快速排序算法,并为你提供一步步的代码实现。
快速排序的流程
下面是快速排序算法的基本流程:
- 选择一个基准元素,将数组分成两个子数组;
- 将小于基准元素的元素放置在基准元素的左边,将大于基准元素的元素放置在基准元素的右边;
- 递归地对左右子数组进行快速排序。
下面是一个流程表格,展示了快速排序的每一步骤:
步骤 | 操作 |
---|---|
1 | 选择一个基准元素 |
2 | 将数组分成两个子数组 |
3 | 对左子数组递归执行快速排序 |
4 | 对右子数组递归执行快速排序 |
代码实现
步骤1:选择一个基准元素
在快速排序中,我们需要选择一个基准元素(pivot)。通常,我们选择数组的第一个元素作为基准元素。你可以使用以下代码选择基准元素:
int pivot = arr[low];
步骤2:将数组分成两个子数组
接下来,我们需要将数组分成两个子数组,一个子数组包含小于基准元素的元素,另一个子数组包含大于基准元素的元素。下面是代码实现:
// 初始化左右指针
int i = low + 1;
int j = high;
while (i <= j) {
// 从左往右找到第一个大于基准元素的元素
while (i <= j && arr[i] <= pivot) {
i++;
}
// 从右往左找到第一个小于基准元素的元素
while (i <= j && arr[j] > pivot) {
j--;
}
// 交换找到的两个元素
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准元素放置在正确的位置
arr[low] = arr[j];
arr[j] = pivot;
步骤3:递归地对左子数组进行快速排序
现在,我们需要对左子数组进行递归排序。你可以使用以下代码实现:
quickSort(arr, low, j - 1);
步骤4:递归地对右子数组进行快速排序
最后,我们需要对右子数组进行递归排序。你可以使用以下代码实现:
quickSort(arr, j + 1, high);
完整代码示例
下面是一个完整的Java代码示例,实现了快速排序算法:
public class QuickSort {
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
// 选择基准元素
int pivot = arr[low];
// 将数组分成两个子数组
int i = low + 1;
int j = high;
while (i <= j) {
while (i <= j && arr[i] <= pivot) {
i++;
}
while (i <= j && arr[j] > pivot) {
j--;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[low] = arr[j];
arr[j] = pivot;
// 对左子数组递归执行快速排序
quickSort(arr, low, j - 1);
// 对右子数组递归执行快速排序
quickSort(arr, j + 1, high);
}
}
}