手撕快速排序 java
时间: 2025-05-10 07:37:08 浏览: 22
### 快速排序算法的手撕代码实现
快速排序是一种基于分治法的高效排序算法,其核心思想是通过选取一个基准值(pivot),将数组划分为两部分:一部分小于等于基准值,另一部分大于基准值。随后递归地对这两部分进行相同的操作。
以下是使用 Java 实现快速排序的具体代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {8, 4, 7, 12, 3, 6, 9};
quickSort(arr, 0, arr.length - 1);
System.out.println("Sorted array:");
for (int num : arr) {
System.out.print(num + " ");
}
}
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
// Partitioning index
int pi = partition(arr, low, high);
// Recursively sort elements before and after partition
quickSort(arr, low, pi - 1); // 左边排序 [^2]
quickSort(arr, pi + 1, high); // 右边排序
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[high]; // 基准值设为最后一个元素 [^1]
int i = (low - 1); // 较小元素索引初始化
for (int j = low; j < high; j++) {
// 当前元素小于或等于 pivot
if (arr[j] <= pivot) {
i++;
// 交换 arr[i] 和 arr[j]
swap(arr, i, j);
}
}
// 交换 arr[i+1] 和 arr[high] (即 pivot)
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;
}
}
```
#### 解析
1. **`quickSort` 方法**
这是一个递归方法,用于执行快速排序的核心逻辑。它接收三个参数:待排序数组 `arr`、起始索引 `low` 和结束索引 `high`。如果 `low` 小于 `high`,则继续划分并递归处理左右子数组 。
2. **`partition` 方法**
此方法负责选定基准值并将数组划分为两部分。基准值通常选作当前分区中的最后一个元素 [^1]。遍历过程中,所有小于等于基准值的元素会被移动到左侧,最终返回基准值所在位置的索引。
3. **`swap` 方法**
提供了一个简单的工具来交换数组中的两个元素。
---
### 性能分析
- 时间复杂度:平均情况下为 \(O(n \log n)\),最坏情况为 \(O(n^2)\)[^3]。
- 空间复杂度:由于递归栈的存在,空间复杂度为 \(O(\log n)\) 到 \(O(n)\) 不等 [^4]。
阅读全文
相关推荐



















