mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-15 08:26:06 +00:00
build
This commit is contained in:
@@ -45,14 +45,14 @@ comments: true
|
||||
|
||||
=== "Java"
|
||||
|
||||
``` java title="quick_sort.java"
|
||||
```java title="quick_sort.java"
|
||||
/* 元素交换 */
|
||||
void swap(int[] nums, int i, int j) {
|
||||
int tmp = nums[i];
|
||||
nums[i] = nums[j];
|
||||
nums[j] = tmp;
|
||||
}
|
||||
|
||||
|
||||
/* 哨兵划分 */
|
||||
int partition(int[] nums, int left, int right) {
|
||||
// 以 nums[left] 作为基准数
|
||||
@@ -468,7 +468,7 @@ comments: true
|
||||
else
|
||||
return right;
|
||||
}
|
||||
|
||||
|
||||
/* 哨兵划分(三数取中值) */
|
||||
int partition(int[] nums, int left, int right) {
|
||||
// 选取三个候选元素的中位数
|
||||
@@ -476,7 +476,16 @@ comments: true
|
||||
// 将中位数交换至数组最左端
|
||||
swap(nums, left, med);
|
||||
// 以 nums[left] 作为基准数
|
||||
// 下同省略...
|
||||
int i = left, j = right;
|
||||
while (i < j) {
|
||||
while (i < j && nums[j] >= nums[left])
|
||||
j--; // 从右向左找首个小于基准数的元素
|
||||
while (i < j && nums[i] <= nums[left])
|
||||
i++; // 从左向右找首个大于基准数的元素
|
||||
swap(nums, i, j); // 交换这两个元素
|
||||
}
|
||||
swap(nums, i, left); // 将基准数交换至两子数组的分界线
|
||||
return i; // 返回基准数的索引
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user