排序算法解析与 Python 示例
引言
在计算机科学中,排序是一个基本的操作,它可以使数据按特定的顺序排列。不同的排序算法具有不同的性能特点和适用场景。本文将介绍六种常见的排序算法,包括它们的原理和 Python 实现。
冒泡排序(Bubble Sort)
原理: 冒泡排序是一种简单的排序算法,它重复遍历列表,比较相邻元素并交换位置,使得最大的元素逐渐“冒泡”到最后。
Python 实现:
1
2
3
4
5
6
7
8
9
10
11
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
for j in range(n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("排序后的数组:", arr)
选择排序(Selection Sort)
原理: 选择排序在未排序部分中选择最小元素,然后将其放在已排序部分的末尾,以此方式逐步构建排序结果。
Python 实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
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]
# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print("排序后的数组:", arr)
插入排序(Insertion Sort)
原理: 插入排序将列表分为已排序和未排序部分,逐个取未排序部分的元素插入到已排序部分的适当位置。
Python 实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(arr)
print("排序后的数组:", arr)
快速排序(Quick Sort)
原理: 快速排序是一种分治算法,通过选择一个基准元素,将数组分为小于和大于基准的两部分,然后递归地对这两部分进行排序。
Python 实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = quick_sort(arr)
print("排序后的数组:", sorted_arr)