mirror of
https://github.com/krahets/hello-algo.git
synced 2025-11-05 06:37:12 +08:00
Update medianThree() in quick_sort.
This commit is contained in:
@ -59,7 +59,7 @@ private:
|
|||||||
static int medianThree(vector<int>& nums, int left, int mid, int right) {
|
static int medianThree(vector<int>& nums, int left, int mid, int right) {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
|
|||||||
@ -65,7 +65,7 @@ namespace hello_algo.chapter_sorting
|
|||||||
{
|
{
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
|
|||||||
@ -47,9 +47,11 @@ func (q *quickSort) quickSort(nums []int, left, right int) {
|
|||||||
|
|
||||||
/* 选取三个元素的中位数 */
|
/* 选取三个元素的中位数 */
|
||||||
func (q *quickSortMedian) medianThree(nums []int, left, mid, right int) int {
|
func (q *quickSortMedian) medianThree(nums []int, left, mid, right int) int {
|
||||||
if (nums[left] > nums[mid]) != (nums[left] > nums[right]) {
|
// 使用了异或操作来简化代码(!= 在这里起到异或的作用)
|
||||||
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
|
if (nums[left] < nums[mid]) != (nums[left] < nums[right]) {
|
||||||
return left
|
return left
|
||||||
} else if (nums[mid] < nums[left]) != (nums[mid] > nums[right]) {
|
} else if (nums[mid] < nums[left]) != (nums[mid] < nums[right]) {
|
||||||
return mid
|
return mid
|
||||||
}
|
}
|
||||||
return right
|
return right
|
||||||
|
|||||||
@ -58,7 +58,7 @@ class QuickSortMedian {
|
|||||||
static int medianThree(int[] nums, int left, int mid, int right) {
|
static int medianThree(int[] nums, int left, int mid, int right) {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
|
|||||||
@ -56,7 +56,7 @@ class QuickSortMedian {
|
|||||||
medianThree(nums, left, mid, right) {
|
medianThree(nums, left, mid, right) {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right])) return left;
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right])) return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right])) return mid;
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right])) return mid;
|
||||||
else return right;
|
else return right;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,7 +42,7 @@ class QuickSortMedian:
|
|||||||
def median_three(self, nums, left, mid, right):
|
def median_three(self, nums, left, mid, right):
|
||||||
# 使用了异或操作来简化代码
|
# 使用了异或操作来简化代码
|
||||||
# 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
# 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if (nums[left] > nums[mid]) ^ (nums[left] > nums[right]):
|
if (nums[left] < nums[mid]) ^ (nums[left] < nums[right]):
|
||||||
return left
|
return left
|
||||||
elif (nums[mid] < nums[left]) ^ (nums[mid] > nums[right]):
|
elif (nums[mid] < nums[left]) ^ (nums[mid] > nums[right]):
|
||||||
return mid
|
return mid
|
||||||
|
|||||||
@ -58,7 +58,7 @@ class QuickSortMedian {
|
|||||||
medianThree(nums: number[], left: number, mid: number, right: number): number {
|
medianThree(nums: number[], left: number, mid: number, right: number): number {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if (Number(nums[left] > nums[mid]) ^ Number(nums[left] > nums[right])) {
|
if (Number(nums[left] < nums[mid]) ^ Number(nums[left] < nums[right])) {
|
||||||
return left;
|
return left;
|
||||||
} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {
|
} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {
|
||||||
return mid;
|
return mid;
|
||||||
|
|||||||
@ -16,20 +16,28 @@ comments: true
|
|||||||
|
|
||||||
=== "Step 1"
|
=== "Step 1"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 2"
|
=== "Step 2"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 3"
|
=== "Step 3"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 4"
|
=== "Step 4"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 5"
|
=== "Step 5"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 6"
|
=== "Step 6"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 7"
|
=== "Step 7"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 8"
|
=== "Step 8"
|
||||||

|

|
||||||
|
|
||||||
=== "Step 9"
|
=== "Step 9"
|
||||||

|

|
||||||
|
|
||||||
@ -220,7 +228,6 @@ comments: true
|
|||||||
swap(nums, i, left); // 将基准数交换至两子数组的分界线
|
swap(nums, i, left); // 将基准数交换至两子数组的分界线
|
||||||
return i; // 返回基准数的索引
|
return i; // 返回基准数的索引
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "Swift"
|
=== "Swift"
|
||||||
@ -408,7 +415,7 @@ comments: true
|
|||||||
int medianThree(int[] nums, int left, int mid, int right) {
|
int medianThree(int[] nums, int left, int mid, int right) {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
@ -434,7 +441,7 @@ comments: true
|
|||||||
int medianThree(vector<int>& nums, int left, int mid, int right) {
|
int medianThree(vector<int>& nums, int left, int mid, int right) {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
@ -460,7 +467,7 @@ comments: true
|
|||||||
def median_three(self, nums, left, mid, right):
|
def median_three(self, nums, left, mid, right):
|
||||||
# 使用了异或操作来简化代码
|
# 使用了异或操作来简化代码
|
||||||
# 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
# 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if (nums[left] > nums[mid]) ^ (nums[left] > nums[right]):
|
if (nums[left] < nums[mid]) ^ (nums[left] < nums[right]):
|
||||||
return left
|
return left
|
||||||
elif (nums[mid] < nums[left]) ^ (nums[mid] > nums[right]):
|
elif (nums[mid] < nums[left]) ^ (nums[mid] > nums[right]):
|
||||||
return mid
|
return mid
|
||||||
@ -481,7 +488,7 @@ comments: true
|
|||||||
```go title="quick_sort.go"
|
```go title="quick_sort.go"
|
||||||
/* 选取三个元素的中位数 */
|
/* 选取三个元素的中位数 */
|
||||||
func medianThree(nums []int, left, mid, right int) int {
|
func medianThree(nums []int, left, mid, right int) int {
|
||||||
if (nums[left] > nums[mid]) != (nums[left] > nums[right]) {
|
if (nums[left] < nums[mid]) != (nums[left] < nums[right]) {
|
||||||
return left
|
return left
|
||||||
} else if (nums[mid] < nums[left]) != (nums[mid] > nums[right]) {
|
} else if (nums[mid] < nums[left]) != (nums[mid] > nums[right]) {
|
||||||
return mid
|
return mid
|
||||||
@ -507,7 +514,7 @@ comments: true
|
|||||||
function medianThree(nums, left, mid, right) {
|
function medianThree(nums, left, mid, right) {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
@ -533,7 +540,7 @@ comments: true
|
|||||||
function medianThree(nums: number[], left: number, mid: number, right: number): number {
|
function medianThree(nums: number[], left: number, mid: number, right: number): number {
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if (Number(nums[left] > nums[mid]) ^ Number(nums[left] > nums[right])) {
|
if (Number(nums[left] < nums[mid]) ^ Number(nums[left] < nums[right])) {
|
||||||
return left;
|
return left;
|
||||||
} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {
|
} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {
|
||||||
return mid;
|
return mid;
|
||||||
@ -566,7 +573,7 @@ comments: true
|
|||||||
{
|
{
|
||||||
// 使用了异或操作来简化代码
|
// 使用了异或操作来简化代码
|
||||||
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
// 异或规则为 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1
|
||||||
if ((nums[left] > nums[mid]) ^ (nums[left] > nums[right]))
|
if ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))
|
||||||
return left;
|
return left;
|
||||||
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
else if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))
|
||||||
return mid;
|
return mid;
|
||||||
|
|||||||
Reference in New Issue
Block a user