Python列表排序算法大全:从冒泡排序到快速排序,掌握算法精髓,提升代码效率
发布时间: 2024-06-19 09:55:42 阅读量: 81 订阅数: 39
Python排序算法,冒泡排序
![Python列表排序算法大全:从冒泡排序到快速排序,掌握算法精髓,提升代码效率](https://img-blog.csdnimg.cn/2021032110220898.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5MTgxODM5,size_16,color_FFFFFF,t_70)
# 1. Python列表排序概述**
Python列表排序是一种对列表中的元素进行重新排列的过程,使其满足特定的顺序。排序算法根据不同的策略和时间复杂度分为基础排序算法和高级排序算法。基础排序算法包括冒泡排序、选择排序和插入排序,而高级排序算法包括快速排序、归并排序和堆排序。
在Python中,可以使用`sort()`方法对列表进行排序。该方法默认按照升序对列表中的元素进行排序,也可以通过指定`reverse=True`参数进行降序排序。
# 2. 基础排序算法
### 2.1 冒泡排序
#### 算法原理
冒泡排序是一种简单的排序算法,它通过比较相邻元素并交换它们的位置来对列表进行排序。它重复遍历列表,直到列表中的所有元素都按升序或降序排列。
#### 代码实现
```python
def bubble_sort(arr):
"""
冒泡排序算法
参数:
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
```
#### 逻辑分析
* 外层循环 `for i in range(n)` 遍历列表,代表当前已排序元素的个数。
* 内层循环 `for j in range(0, n - i - 1)` 遍历未排序元素,比较相邻元素并交换位置。
* 如果 `arr[j]` 大于 `arr[j + 1]`,则交换它们的位置。
* 经过一次外层循环,最大的元素将浮到列表末尾。
### 2.2 选择排序
#### 算法原理
选择排序是一种简单有效的排序算法,它通过在未排序列表中找到最小(或最大)元素并将其与列表开头交换来对列表进行排序。此过程重复进行,直到列表中的所有元素都按升序或降序排列。
#### 代码实现
```python
def selection_sort(arr):
"""
选择排序算法
参数:
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
```
#### 逻辑分析
* 外层循环 `for i in range(n)` 遍历列表,代表当前已排序元素的个数。
* 内层循环 `for j in range(i + 1, n)` 遍历未排序元素,找到最小元素的索引 `min_idx`。
* 将 `arr[min_idx]` 与 `arr[i]` 交换,将最小元素移动到列表开头。
* 经过一次外层循环,最小的元素将被放置在列表的开头。
### 2.3 插入排序
#### 算法原理
插入排序是一种简单直观的排序算法,它通过将未排序元素逐个插入到已排序部分中来对列表进行排序。它从第二个元素开始,将其与已排序部分中的元素进行比较,并将其插入到适当的位置。
#### 代码实现
```python
def insertion_sort(arr):
"""
插入排序算法
参数:
arr:要排序的列表
返回:
排序后的列表
"""
n = len(arr)
for i in range(1, n):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
```
#### 逻辑分析
* 外层循环 `for i in range(1, n)` 遍历未排序元素。
* 将 `arr[i]` 作为待插入元素,并将其与已排序部分中的元素
0
0