Skip to content

Commit 083fde3

Browse files
committed
modified
1 parent 1f6fd6a commit 083fde3

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

docs/Mergesort.md

+10-8
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,27 @@
4242
### 递归实现
4343

4444
```python
45-
def merge_sort(array: List) -> List:
45+
def merge_sort(array: List, reverse: bool=False) -> List:
4646
'''
4747
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
48+
reverse: 是否降序, 默认采用升序。
4849
'''
4950
if len(array) <= 1:
5051
return array
5152
mid = len(array) // 2
5253
left = merge_sort(array[:mid])
5354
right = merge_sort(array[mid:])
54-
return merge(left, right)
55+
return merge(left, right, reverse=reverse)
5556

56-
def merge(l: int, r: int) -> List:
57+
def merge(l: int, r: int, reverse: bool=False) -> List:
5758
'''
5859
l: 数据左侧游标(整型), r: 数据右侧游标(整型)
5960
'''
6061
result = []
6162
i = 0
6263
j = 0
6364
while i < len(l) and j < len(r):
64-
if(l[i] <= r[j]):
65+
if l[i] > r[j] if reverse else l[i] <= r[j]:
6566
result.append(l[i])
6667
i += 1
6768
else:
@@ -75,7 +76,7 @@ def merge(l: int, r: int) -> List:
7576
### 非递归实现
7677

7778
```python
78-
def merge(array: List, low: int, mid: int, high: int) -> None:
79+
def merge(array: List, low: int, mid: int, high: int, reverse: bool=False) -> None:
7980
'''
8081
low: 数据低侧游标(整型), mid: 数据中间游标(整型), high: 数据高侧游标(整型)
8182
'''
@@ -85,7 +86,7 @@ def merge(array: List, low: int, mid: int, high: int) -> None:
8586
j = 0
8687
result = []
8788
while i < len(left) and j < len(right):
88-
if left[i] <= right[j]:
89+
if left[i] > right[j] if reverse else left[i] <= right[j]:
8990
result.append(left[i])
9091
i += 1
9192
else:
@@ -95,9 +96,10 @@ def merge(array: List, low: int, mid: int, high: int) -> None:
9596
result += right[j:]
9697
array[low: high] = result
9798

98-
def merge_sort(array: List) -> None:
99+
def merge_sort(array: List, reverse: bool=False) -> None:
99100
'''
100101
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
102+
reverse: 是否降序, 默认采用升序。
101103
'''
102104
i = 1
103105
while i < len(array):
@@ -106,7 +108,7 @@ def merge_sort(array: List) -> None:
106108
mid = low + i
107109
high = min(low + 2 * i, len(array))
108110
if mid < high:
109-
merge(array, low, mid, high)
111+
merge(array, low, mid, high, reverse=reverse)
110112
low += 2 * i
111113
i *= 2
112114
```

sortingx/merge.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from typing import List
22

33
# 递归实现
4-
def recur(array: List) -> List:
4+
def recur(array: List, reverse: bool=False) -> List:
55
'''
66
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
7+
reverse: 是否降序, 默认采用升序。
78
'''
89
def merge_sort(array: List) -> List:
910
'''
@@ -24,7 +25,7 @@ def merge(l: int, r: int) -> List:
2425
i = 0
2526
j = 0
2627
while i < len(l) and j < len(r):
27-
if(l[i] <= r[j]):
28+
if l[i] > r[j] if reverse else l[i] <= r[j]:
2829
result.append(l[i])
2930
i += 1
3031
else:
@@ -36,9 +37,10 @@ def merge(l: int, r: int) -> List:
3637
return merge_sort(array)
3738

3839
# 非递归实现
39-
def stack(array: List) -> None:
40+
def stack(array: List, reverse: bool=False) -> None:
4041
'''
4142
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
43+
reverse: 是否降序, 默认采用升序。
4244
'''
4345
def merge(array: List, low: int, mid: int, high: int) -> None:
4446
'''
@@ -50,7 +52,7 @@ def merge(array: List, low: int, mid: int, high: int) -> None:
5052
j = 0
5153
result = []
5254
while i < len(left) and j < len(right):
53-
if left[i] <= right[j]:
55+
if left[i] > right[j] if reverse else left[i] <= right[j]:
5456
result.append(left[i])
5557
i += 1
5658
else:

0 commit comments

Comments
 (0)