Python中有多种排序和搜索算法可供使用,下面分别进行介绍。
### 数组排序
1. 内置函数`sorted()`
`sorted()`函数可以对可迭代对象进行排序(默认升序),并返回一个新的排好序的列表。
```python
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_arr = sorted(arr)
print(sorted_arr) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
```
2. 内置函数`sort()`
`sort()`函数可以对列表进行排序,会直接修改原始列表。
```python
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
arr.sort()
print(arr) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
```
3. 内置函数`heapq.nsmallest()`和`heapq.nlargest()`
`heapq.nsmallest()`和`heapq.nlargest()`函数可以在不进行完整排序的情况下,找到列表中最小/最大的n个元素。
```python
import heapq
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
smallest_three = heapq.nsmallest(3, arr)
print(smallest_three) # [1, 1, 2]
largest_three = heapq.nlargest(3, arr)
print(largest_three) # [9, 6, 5]
```
4. 内置函数`sorted()`和`lambda`表达式
如果需要按照某个复杂的规则进行排序,则可以使用`sorted()`函数的`key`参数,并结合`lambda`表达式来完成。
```python
arr = ["banana", "apple", "pear", "orange"]
sorted_arr = sorted(arr, key=lambda x: x[1]) # 按照第二个字符排序
print(sorted_arr) # ['apple', 'banana', 'orange', 'pear']
```
### 数组搜索
1. 内置函数`index()`
`index()`函数可以在列表中查找指定元素的位置,如果不存在则会抛出`ValueError`异常。
```python
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
index = arr.index(4)
print(index) # 2
```
2. 内置函数`count()`
`count()`函数可以统计列表中指定元素的个数。
```python
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
count = arr.count(5)
print(count) # 3
```
3. 使用循环进行查找
如果列表没有进行排序,则可以使用循环进行查找。
```python
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# 查找第一个5的位置
index = -1
for i in range(len(arr)):
if arr[i] == 5:
index = i
break
print(index) # 4
```
4. 使用二分查找进行查找
如果列表已经进行了排序,则可以使用二分查找进行查找。可以使用`bisect`模块中的函数来进行。
```python
import bisect
arr = [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
# 查找第一个5的位置
index = bisect.bisect_left(arr, 5)
print(index) # 6
```