Skip to content

Commit 6db4783

Browse files
committed
add reverse
1 parent 3848588 commit 6db4783

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

docs/Quicksort.md

+9-7
Original file line numberDiff line numberDiff line change
@@ -64,32 +64,33 @@ $$
6464
### 一行实现
6565

6666
```python
67-
quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quick_sort([item for item in array[1:] if item > array[0]])
67+
quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in array[1:] if (item > array[0] if reverse else item <= array[0])]) + [array[0]] + quick_sort([item for item in array[1:] if (item <= array[0] if reverse else item > array[0])])
6868
```
6969

7070
### 递归实现
7171

7272
```python
73-
def quick_sort(array: List, l: int, r: int) -> None:
73+
def quick_sort(array: List, l: int, r: int, reverse: bool=False) -> None:
7474
'''
7575
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
7676
l: 数据左侧游标(整型), r: 数据右侧游标(整型)
77+
reverse: 是否降序, 默认采用升序。
7778
'''
7879
assert l >= 0
7980
assert r >= 0
8081
if l < r:
81-
mid = partition(array, l, r)
82+
mid = partition(array, l, r, reverse=reverse)
8283
quick_sort(array, l, mid - 1)
8384
quick_sort(array, mid + 1, r)
8485

85-
def partition(array: List, l: int, r: int) -> int:
86+
def partition(array: List, l: int, r: int, reverse: bool=False) -> int:
8687
'''
8788
array: 数据(列表), l: 数据左侧游标(整型), r: 数据右侧游标(整型)
8889
'''
8990
value = array[r]
9091
index = l - 1
9192
for ind in range(l, r):
92-
if array[ind] <= value:
93+
if array[ind] > value if reverse else array[ind] <= value:
9394
index += 1
9495
array[index], array[ind] = array[ind], array[index]
9596
array[index + 1], array[r] = array[r], array[index + 1]
@@ -99,10 +100,11 @@ def partition(array: List, l: int, r: int) -> int:
99100
### 非递归实现
100101

101102
```python
102-
def quick_sort(array: List, l: int, r: int) -> None:
103+
def quick_sort(array: List, l: int, r: int, reverse: bool=False) -> None:
103104
'''
104105
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
105106
l: 数据左侧游标(整型), r: 数据右侧游标(整型)
107+
reverse: 是否降序, 默认采用升序。
106108
'''
107109
assert l >= 0
108110
assert r >= 0
@@ -119,7 +121,7 @@ def quick_sort(array: List, l: int, r: int) -> None:
119121
value = array[high]
120122
index = low - 1
121123
for ind in range(low, high):
122-
if array[ind] <= value:
124+
if array[ind] > value if reverse else array[ind] <= value:
123125
index += 1
124126
array[index], array[ind] = array[ind], array[index]
125127
array[index + 1], array[high] = array[high], array[index + 1]

sortingx/quick.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1+
from array import array
12
from typing import List
23

34
# lambda实现
4-
def lamb(array: List) -> List:
5+
def lamb(array: List, reverse: bool=False) -> List:
56
'''
67
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
8+
reverse: 是否降序, 默认采用升序。
79
'''
8-
quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quick_sort([item for item in array[1:] if item > array[0]])
10+
quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in array[1:] if (item > array[0] if reverse else item <= array[0])]) + [array[0]] + quick_sort([item for item in array[1:] if (item <= array[0] if reverse else item > array[0])])
911
return quick_sort(array)
1012

1113
# 递归实现
12-
def recur(array: List, l: int, r: int) -> None:
14+
def recur(array: List, l: int, r: int, reverse: bool=False) -> None:
1315
'''
1416
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
1517
l: 数据左侧游标(整型), r: 数据右侧游标(整型)
18+
reverse: 是否降序, 默认采用升序。
1619
'''
1720
assert l >= 0
1821
assert r >= 0
@@ -32,18 +35,19 @@ def partition(array: List, l: int, r: int) -> int:
3235
value = array[r]
3336
index = l - 1
3437
for ind in range(l, r):
35-
if array[ind] <= value:
38+
if array[ind] > value if reverse else array[ind] <= value:
3639
index += 1
3740
array[index], array[ind] = array[ind], array[index]
3841
array[index + 1], array[r] = array[r], array[index + 1]
3942
return index + 1
4043
quick_sort(array, l, r)
4144

4245
# 非递归实现
43-
def stack(array: List, l: int, r: int) -> None:
46+
def stack(array: List, l: int, r: int, reverse: bool=False) -> None:
4447
'''
4548
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
4649
l: 数据左侧游标(整型), r: 数据右侧游标(整型)
50+
reverse: 是否降序, 默认采用升序。
4751
'''
4852
assert l >= 0
4953
assert r >= 0
@@ -60,7 +64,7 @@ def stack(array: List, l: int, r: int) -> None:
6064
value = array[high]
6165
index = low - 1
6266
for ind in range(low, high):
63-
if array[ind] <= value:
67+
if array[ind] > value if reverse else array[ind] <= value:
6468
index += 1
6569
array[index], array[ind] = array[ind], array[index]
6670
array[index + 1], array[high] = array[high], array[index + 1]

0 commit comments

Comments
 (0)