Skip to content

排序算法

排序算法,就是把一组数据按照一定的规则重新排列的算法。最常见的规则有两种:

  • 从小到大排序
  • 从大到小排序

一、冒泡排序(Bubble Sort)

1. 基本思想

冒泡排序是一种通过相邻元素之间的比较和交换,逐步将“最大”元素“冒泡”到数组末端的排序算法。这个过程类似于水中的气泡上升,因此得名“冒泡排序”。

2. 工作原理

  • 从数组的开始,依次比较相邻的元素,如果前一个元素大于后一个元素,则交换它们的位置。
  • 每一次遍历,都会将当前未排序部分中的最大元素移动到数组的末端。
  • 这个过程重复进行,直到所有元素都被排好序。

img

3. 程序实现

python
# 原始列表
arr = [5, 3, 4, 1, 2]
n = len(arr)
# 外层循环:控制比较的轮数
for i in range(n - 1):
    swapped = False  # 标记这一轮是否发生交换
    # 内层循环:相邻元素比较
    for j in range(0, n - i - 1):
        if arr[j] > arr[j + 1]:
            # 交换位置
            arr[j], arr[j + 1] = arr[j + 1], arr[j]
            swapped = True
    # 如果这一轮没有发生交换,说明已经有序
    if not swapped:
        break
# 打印列表
print(arr)

二、选择排序(Selection Sort)

1. 基本思想

选择排序是一种通过不断从未排序部分中选择最小(或最大)元素,并将其放到已排序部分末尾的排序算法。

2. 工作原理

  • 将数组分为已排序部分未排序部分
  • 每一轮从未排序部分中找出最小的元素。
  • 将该最小元素与未排序部分的第一个元素交换位置。
  • 重复上述过程,直到所有元素都有序。

selectionSort

3. 程序实现

python
# 原始列表
arr = [5, 3, 4, 1, 2]
n = len(arr)

# 外层循环:控制选择的轮数
for i in range(n - 1):
    min_index = i  # 假设当前位置是最小值的位置

    # 内层循环:在未排序部分中寻找最小值
    for j in range(i + 1, n):
        if arr[j] < arr[min_index]:
            min_index = j

    # 将最小值放到当前位置
    arr[i], arr[min_index] = arr[min_index], arr[i]

# 打印列表
print(arr)

三、插入排序(Insertion Sort)

1. 基本思想

插入排序是一种类似于整理扑克牌的排序算法。

它的思想是: 将当前元素插入到前面已经排好序的序列中,使前面的序列始终保持有序。

2. 工作原理

  • 将第一个元素看作已经排好序。
  • 从第二个元素开始,依次取出当前元素。
  • 将当前元素与已排序部分的元素从后向前比较。
  • 找到合适的位置后,将当前元素插入。
  • 重复上述过程,直到整个序列有序。

insertionSort

3. 程序实现

python
# 原始列表
arr = [5, 3, 4, 1, 2]
n = len(arr)

# 外层循环:从第二个元素开始
for i in range(1, n):
    current = arr[i]  # 当前要插入的元素
    j = i - 1

    # 将比 current 大的元素向后移动
    while j >= 0 and arr[j] > current:
        arr[j + 1] = arr[j]
        j -= 1

    # 插入到合适的位置
    arr[j + 1] = current

# 打印列表
print(arr)

💬 与我联系 QQ:774165314 | 微信:Yonas_Luo