Python中实现排序的方法有多种,以下是一些常用的排序算法及其代码示例:
冒泡排序
原理:通过不断交换相邻的元素,将大的数字“浮”到后面去。
代码示例:
```python
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
nums = [64, 34, 25, 12, 22, 11, 90]
print("排序前:", nums)
print("排序后:", bubble_sort(nums))
```
选择排序
原理:每次从未排序的部分找到最小的元素,放到已排序部分的末尾。
代码示例:
```python
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
```
快速排序
原理:选择一个基准元素,将数组分为两部分,一部分比基准小,一部分比基准大,然后递归地对两部分进行排序。
代码示例:
```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
```
内置排序函数
`sorted()`:返回一个新的排序列表,原列表不变。
`.sort()`:直接在原列表上进行排序,不返回值。
示例:
```python
numbers = [5, 3, 8, 6, 2]
sorted_numbers = sorted(numbers)
print("使用 sorted() 排序后的新列表:", sorted_numbers)
print("原列表未改变:", numbers)
numbers.sort()
print("使用 .sort() 排序后原列表变为:", numbers)
```
自定义排序规则
可以通过`key`参数指定排序依据,`reverse`参数指定是否降序排序。
示例:
```python
numbers = [5, 3, 8, 6, 2]
sorted_numbers = sorted(numbers, key=lambda x: x, reverse=True)
print("降序排序后的新列表:", sorted_numbers)
```
忽略大小写排序
在排序字符串时,可以使用`key`参数将字符串转换为小写进行比较。
示例:
```python
words = ['bob', 'about', 'zoo', 'Credit']
sorted_words = sorted(words, key=lambda s: s.lower())
print("忽略大小写排序后:", sorted_words)
```
多列排序
可以通过指定多个列名和`ascending`参数进行多列排序。
示例:
```python
df = pd.DataFrame({
'姓名': ['小王', '小李', '小张', '小陈'],
'年龄': [25, 22, 28, 24],
'工资': [8000, 7000, 12000, 9000]
})
df_sorted = df.sort_values(['年龄', '工资'], ascending=[False, True])
print(df_sorted)
```
这些排序算法各有优缺点,选择合适的算法可以提高程序的效率。对于小数据集,插入排序和冒泡排序是简单有效的选择;对于大数据集,快速排序和内置的`sorted()`函数更为高效。