以下是Java实现快速排序的代码,添加了便于快速记忆的注释和口诀:
代码实现(带注释)
java
public class QuickSort {
public void sort(int[] arr) {
if (arr == null || arr.length == 0) return;
quickSort(arr, 0, arr.length - 1);
}
private void quickSort(int[] arr, int left, int right) {
if (left >= right) return; // 终止条件
int pivotIndex = partition(arr, left, right); // 分区
quickSort(arr, left, pivotIndex - 1); // 递归左半部分
quickSort(arr, pivotIndex + 1, right); // 递归右半部分
}
private int partition(int[] arr, int left, int right) {
int pivot = arr[right]; // 选择最右元素作为基准值
int i = left - 1; // 小于基准值的元素边界
for (int j = left; j < right; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr, i, j); // 将小于等于基准值的元素交换到左边
}
}
swap(arr, i + 1, right); // 将基准值放到正确位置
return i + 1; // 返回基准值的索引
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
记忆口诀
css
快排分三步,基准分区递归走
分区选最右,双指针来比大小
i指针标记小,j指针向前找
小于基准就交换,最后基准归位好
关键点记忆:
- 核心思想:分治法(Divide and Conquer)
- 分区逻辑 :
- 选择最右元素为基准值(pivot)
- 使用双指针
i
和j
,i
标记小于基准值的元素边界
- 递归过程 :
- 左半部分:
[left, pivotIndex-1]
- 右半部分:
[pivotIndex+1, right]
- 左半部分: