@@ -26,34 +26,36 @@ $n$ 个记录的数组可经过 $n-1$ 轮选择排序得到有序结果。
26
26
### 普通版本
27
27
28
28
``` python
29
- def selection_sort (array : List) -> None :
29
+ def selection_sort (array : List, reverse : bool = False ) -> None :
30
30
'''
31
31
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
32
+ reverse: 是否降序, 默认采用升序。
32
33
'''
33
34
length = len (array)
34
35
for index in range (length - 1 ):
35
- mind = index # 标记最小关键字位置
36
+ mind = index # 标记关键字位置
36
37
for next in range (index + 1 , length): # 搜索
37
- if array[mind] > array[next ]:
38
+ if array[mind] < array[ next ] if reverse else array[mind] > array[next ]:
38
39
mind = next
39
40
array[index], array[mind] = array[mind], array[index]
40
41
```
41
42
42
43
### 标记最大值
43
44
44
45
``` python
45
- def selection_sort (array : List) -> None :
46
+ def selection_sort (array : List, reverse : bool = False ) -> None :
46
47
'''
47
48
支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。
49
+ reverse: 是否降序, 默认采用升序。
48
50
'''
49
51
length = len (array)
50
52
scope = length // 2
51
53
for index in range (scope):
52
54
mind, maxd = index, index # 从一个方向搜索来保证单调性
53
55
for next in range (index + 1 , length - index):
54
- if array[mind] > array[next ]:
56
+ if array[mind] < array[ next ] if reverse else array[mind] > array[next ]:
55
57
mind = next
56
- if array[maxd] < array[next ]:
58
+ if array[maxd] > array[ next ] if reverse else array[maxd] < array[next ]:
57
59
maxd = next
58
60
array[mind], array[index] = array[index], array[mind]
59
61
maxd = mind if index == maxd else maxd
0 commit comments