python常用排序算法 Python常用排序算法 排序算法是计算机科学中的基本算法之一,它是将一组数据按照一定的顺序进行排列的过程。在Python中,常用的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序等。 1. 冒泡排序 冒泡排序是一种简单的排序算法,它的基本思想是通过相邻元素之间的比较和交换来把小的数交换到前面,大的数交换到后面。具体实现过程如下: ```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 ``` 2. 选择排序 python常用排序算法(1)全文共5页,当前为第1页。 python常用排序算法(1)全文共5页,当前为第1页。 选择排序是一种简单直观的排序算法,它的基本思想是每次从未排序的数据中选择最小的元素,放到已排序的数据末尾。具体实现过程如下: ```python def selection 【Python 常用排序算法详解】 排序算法是编程领域中的基础组成部分,尤其在Python这样的高级语言中,理解和掌握各种排序算法对优化程序性能至关重要。本文将深入介绍五种常见的Python排序算法:冒泡排序、选择排序、插入排序、快速排序和归并排序。 1. **冒泡排序** 冒泡排序是最简单的排序算法之一,它通过重复遍历数组,比较相邻元素并交换位置来完成排序。具体步骤如下: - 对每一对相邻元素进行比较,如果它们的顺序错误,则交换。 - 重复以上步骤,直到没有更多的交换,此时数组已排序。 ```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 ``` 2. **选择排序** 选择排序通过每次从未排序的元素中找到最小(或最大)的元素,然后将其放到已排序序列的末尾。这个过程一直持续到所有元素都在正确的位置上。 ```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 ``` 3. **插入排序** 插入排序类似于整理扑克牌,每张未排序的牌插入到已排序的牌列中正确的位置。这个算法对于小规模或者接近有序的列表效率较高。 ```python def insertion_sort(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 ``` 4. **快速排序** 快速排序是高效的分治算法,通过选取一个“基准”值,将数组分为两部分,小于基准的放在左边,大于等于的放在右边,然后递归地对这两部分进行快速排序。 ```python def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[0] 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) ``` 5. **归并排序** 归并排序是基于分治策略的排序算法,将数组分成两个子数组,分别排序,再合并这两个已排序的子数组。这个过程保证了合并后依然是有序的。 ```python def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left, right) def merge(left, right): i, j = 0, 0 res = [] while i < len(left) and j < len(right): if left[i] <= right[j]: res.append(left[i]) i += 1 else: res.append(right[j]) j += 1 res.extend(left[i:]) res.extend(right[j:]) return res ``` 这些排序算法各有优缺点。冒泡排序和选择排序在最坏情况下的时间复杂度是O(n²),适用于小规模数据;插入排序对于近乎有序的列表有良好表现;快速排序平均时间复杂度为O(n log n),但在最坏情况下为O(n²);归并排序始终保证O(n log n)的时间复杂度,但需要额外的空间。根据具体场景选择合适的排序算法至关重要,以提高程序的运行效率。
- 粉丝: 105
- 资源: 9354
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助