七种常用排序算法:从原理到实现

作者:热心市民鹿先生2024.01.30 01:41浏览量:15

简介:本文将介绍七种常用的排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序和计数排序。我们将深入理解每种算法的原理,并通过代码实现来展示其应用。

排序算法是计算机科学中一个重要的分支,它们在数据处理、数据结构等领域有着广泛的应用。本文将介绍七种常用的排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序和计数排序。我们将深入理解每种算法的原理,并通过代码实现来展示其应用。
一、冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历待排序的序列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历序列的工作是重复地进行直到没有再需要交换,也就是说该序列已经排序完成。这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端。
以下是Python中实现冒泡排序的代码:

  1. def bubble_sort(arr):
  2. n = len(arr)
  3. for i in range(n): # 遍历所有数组元素
  4. for j in range(0, n-i-1): # 逐个比较相邻元素
  5. if arr[j] > arr[j+1]:
  6. arr[j], arr[j+1] = arr[j+1], arr[j] # 交换位置
  7. return arr

二、选择排序
选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。
以下是Python中实现选择排序的代码:

  1. def selection_sort(arr):
  2. for i in range(len(arr)): # 找到最小元素的索引
  3. min_idx = i # 假设当前索引是最小值的索引
  4. for j in range(i+1, len(arr)): # 从当前索引开始向后查找最小值索引
  5. if arr[min_idx] > arr[j]: # 如果找到更小的值,则更新最小值索引
  6. min_idx = j
  7. arr[i], arr[min_idx] = arr[min_idx], arr[i] # 交换位置
  8. return arr

三、插入排序
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
以下是Python中实现插入排序的代码:

  1. def insertion_sort(arr):
  2. for i in range(1, len(arr)): # 从第二个元素开始遍历数组
  3. key = arr[i]
  4. j = i-1 # 初始化j为i的前一个元素
  5. while j >=0 and key < arr[j] : # 如果当前元素小于前一个元素,则将前一个元素向后移动一位
  6. arr[j+1] = arr[j]
  7. j -= 1
  8. arr[j+1] = key # 找到合适的位置插入当前元素
  9. return arr

四、快速排序
快速排序是一种分而治之的排序算法。它将一个数组分成两个子数组,然后对子数组递归地进行快速排序,最后将排好序的子数组合并成一个有序数组。快速排序是一种原地、递归、分而治之的算法。它的平均时间复杂度为O(log n),最坏情况下的时间复杂度为O(n^2)。快速排序是不稳定的排序方法。
以下是Python中实现快速排序的代码:
```python
def quicksort(arr): # 快速排序函数定义,参数为待排序列和起始位置(默认为0)和结束位置(默认为序列长度)
if len(arr) <= 1: # 基本结束条件,当序列长度小于或