Skip to content

Commit 5f0ae84

Browse files
committed
Update medianThree() in quick_sort.
1 parent 3e19205 commit 5f0ae84

File tree

8 files changed

+25
-16
lines changed

8 files changed

+25
-16
lines changed

codes/cpp/chapter_sorting/quick_sort.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class QuickSortMedian {
5959
static int medianThree(vector<int>& nums, int left, int mid, int right) {
6060
// 使用了异或操作来简化代码
6161
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
62-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
62+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
6363
return left;
6464
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
6565
return mid;

codes/csharp/chapter_sorting/quick_sort.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ static int medianThree(int[] nums, int left, int mid, int right)
6565
{
6666
// 使用了异或操作来简化代码
6767
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
68-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
68+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
6969
return left;
7070
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
7171
return mid;

codes/go/chapter_sorting/quick_sort.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,11 @@ func (q *quickSort) quickSort(nums []int, left, right int) {
4747

4848
/* 选取三个元素的中位数 */
4949
func (q *quickSortMedian) medianThree(nums []int, left, mid, right int) int {
50-
if (nums[left] > nums[mid]) != (nums[left] > nums[right]) {
50+
// 使用了异或操作来简化代码(!= 在这里起到异或的作用)
51+
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
52+
if (nums[left] < nums[mid]) != (nums[left] < nums[right]) {
5153
return left
52-
} else if (nums[mid] < nums[left]) != (nums[mid] > nums[right]) {
54+
} else if (nums[mid] < nums[left]) != (nums[mid] < nums[right]) {
5355
return mid
5456
}
5557
return right

codes/java/chapter_sorting/quick_sort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ static void swap(int[] nums, int i, int j) {
5858
static int medianThree(int[] nums, int left, int mid, int right) {
5959
// 使用了异或操作来简化代码
6060
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
61-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
61+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
6262
return left;
6363
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
6464
return mid;

codes/javascript/chapter_sorting/quick_sort.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class QuickSortMedian {
5656
medianThree(nums, left, mid, right) {
5757
// 使用了异或操作来简化代码
5858
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
59-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right])) return left;
59+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right])) return left;
6060
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right])) return mid;
6161
else return right;
6262
}

codes/python/chapter_sorting/quick_sort.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class QuickSortMedian:
4242
def median_three(self, nums, left, mid, right):
4343
# 使用了异或操作来简化代码
4444
# 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
45-
if (nums[left] > nums[mid]) ^ (nums[left] > nums[right]):
45+
if (nums[left] < nums[mid]) ^ (nums[left] < nums[right]):
4646
return left
4747
elif (nums[mid] < nums[left]) ^ (nums[mid] > nums[right]):
4848
return mid

codes/typescript/chapter_sorting/quick_sort.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class QuickSortMedian {
5858
medianThree(nums: number[], left: number, mid: number, right: number): number {
5959
// 使用了异或操作来简化代码
6060
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
61-
if (Number(nums[left] > nums[mid]) ^ Number(nums[left] > nums[right])) {
61+
if (Number(nums[left] < nums[mid]) ^ Number(nums[left] < nums[right])) {
6262
return left;
6363
} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {
6464
return mid;

docs/chapter_sorting/quick_sort.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,28 @@ comments: true
1616

1717
=== "Step 1"
1818
![pivot_division_step1](quick_sort.assets/pivot_division_step1.png)
19+
1920
=== "Step 2"
2021
![pivot_division_step2](quick_sort.assets/pivot_division_step2.png)
22+
2123
=== "Step 3"
2224
![pivot_division_step3](quick_sort.assets/pivot_division_step3.png)
25+
2326
=== "Step 4"
2427
![pivot_division_step4](quick_sort.assets/pivot_division_step4.png)
28+
2529
=== "Step 5"
2630
![pivot_division_step5](quick_sort.assets/pivot_division_step5.png)
31+
2732
=== "Step 6"
2833
![pivot_division_step6](quick_sort.assets/pivot_division_step6.png)
34+
2935
=== "Step 7"
3036
![pivot_division_step7](quick_sort.assets/pivot_division_step7.png)
37+
3138
=== "Step 8"
3239
![pivot_division_step8](quick_sort.assets/pivot_division_step8.png)
40+
3341
=== "Step 9"
3442
![pivot_division_step9](quick_sort.assets/pivot_division_step9.png)
3543

@@ -220,7 +228,6 @@ comments: true
220228
swap(nums, i, left); // 将基准数交换至两子数组的分界线
221229
return i; // 返回基准数的索引
222230
}
223-
224231
```
225232

226233
=== "Swift"
@@ -408,7 +415,7 @@ comments: true
408415
int medianThree(int[] nums, int left, int mid, int right) {
409416
// 使用了异或操作来简化代码
410417
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
411-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
418+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
412419
return left;
413420
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
414421
return mid;
@@ -434,7 +441,7 @@ comments: true
434441
int medianThree(vector<int>& nums, int left, int mid, int right) {
435442
// 使用了异或操作来简化代码
436443
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
437-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
444+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
438445
return left;
439446
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
440447
return mid;
@@ -460,7 +467,7 @@ comments: true
460467
def median_three(self, nums, left, mid, right):
461468
# 使用了异或操作来简化代码
462469
# 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
463-
if (nums[left] > nums[mid]) ^ (nums[left] > nums[right]):
470+
if (nums[left] < nums[mid]) ^ (nums[left] < nums[right]):
464471
return left
465472
elif (nums[mid] < nums[left]) ^ (nums[mid] > nums[right]):
466473
return mid
@@ -481,7 +488,7 @@ comments: true
481488
```go title="quick_sort.go"
482489
/* 选取三个元素的中位数 */
483490
func medianThree(nums []int, left, mid, right int) int {
484-
if (nums[left] > nums[mid]) != (nums[left] > nums[right]) {
491+
if (nums[left] < nums[mid]) != (nums[left] < nums[right]) {
485492
return left
486493
} else if (nums[mid] < nums[left]) != (nums[mid] > nums[right]) {
487494
return mid
@@ -507,7 +514,7 @@ comments: true
507514
function medianThree(nums, left, mid, right) {
508515
// 使用了异或操作来简化代码
509516
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
510-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
517+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
511518
return left;
512519
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
513520
return mid;
@@ -533,7 +540,7 @@ comments: true
533540
function medianThree(nums: number[], left: number, mid: number, right: number): number {
534541
// 使用了异或操作来简化代码
535542
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
536-
if (Number(nums[left] > nums[mid]) ^ Number(nums[left] > nums[right])) {
543+
if (Number(nums[left] < nums[mid]) ^ Number(nums[left] < nums[right])) {
537544
return left;
538545
} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {
539546
return mid;
@@ -566,7 +573,7 @@ comments: true
566573
{
567574
// 使用了异或操作来简化代码
568575
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
569-
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
576+
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
570577
return left;
571578
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
572579
return mid;

0 commit comments

Comments
 (0)