写点什么

经典排序算法:冒泡排序与选择排序

  • 2024-12-06
    北京
  • 本文字数:1710 字

    阅读完需:约 6 分钟

全面解析软件测试开发:人工智能测试、自动化测试、性能测试、测试左移、测试右移到DevOps如何驱动持续交付 

排序算法是计算机科学中非常基础且重要的一部分,它们的应用几乎遍布所有数据处理领域,从数据库查询到图形渲染都离不开高效的排序算法。本文将介绍两种经典的排序算法:冒泡排序 和 选择排序。我们将详细解析它们的工作原理、时间复杂度及应用场景。

1. 冒泡排序(Bubble Sort)

1.1 算法概述

冒泡排序是一种简单的排序算法,它通过重复交换相邻未按顺序排列的元素来逐步将较大的元素“冒泡”到数列的末尾,直到整个序列有序为止。其名字来源于元素像气泡一样从序列的一端“冒”到另一端。

1.2 工作原理

  1. 从数组的第一个元素开始,比较相邻的两个元素。如果它们的顺序错误(即前一个元素大于后一个元素),就交换它们的位置。

  2. 继续比较下一个相邻元素,直到数组的末尾。

  3. 每完成一次遍历,最大的元素将“冒泡”到数组的末尾。

  4. 重复上述步骤,逐次将较大的元素放到已排序部分的末尾。每次遍历都会比前一次少比较一个元素,直到数组完全有序。

1.3 算法实现(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
复制代码

1.4 时间复杂度分析

  • 最优时间复杂度:O(n) —— 当输入序列已经是有序的时,冒泡排序只需要一次遍历。

  • 最坏时间复杂度:O(n²) —— 在输入序列是倒序时,冒泡排序需要进行最多的交换操作。

  • 平均时间复杂度:O(n²)

尽管冒泡排序在理论上简单易懂,但它在大规模数据集上的效率较低,通常不适合用于实际应用中的大规模数据排序。

1.5 优缺点

  • 优点:实现简单,易于理解。是一种稳定的排序算法,即相同元素的相对位置不会改变。

  • 缺点:时间复杂度较高,尤其是对于大数据集。在每一轮遍历时,它的交换次数过多,性能不佳。

2. 选择排序(Selection Sort)

2.1 算法概述

选择排序是一种简单的排序算法,其基本思想是每一轮从未排序部分中选出最小(或最大)元素,并将其放到已排序部分的末尾。通过不断选择最小元素,最终将整个序列排序。

2.2 工作原理

  1. 在未排序部分中,找到最小的元素。

  2. 将最小的元素与未排序部分的第一个元素交换。

  3. 将已排序部分的范围扩大,并重复进行上述操作,直到所有元素都排序完成。

2.3 算法实现(Python)

def selection_sort(arr):    n = len(arr)    for i in range(n):        # 假设当前i为最小元素的索引        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
复制代码

2.4 时间复杂度分析

  • 最优时间复杂度:O(n²) —— 无论输入序列是否有序,选择排序始终需要进行相同数量的比较和交换操作。

  • 最坏时间复杂度:O(n²) —— 每次遍历仍然要进行 (n-1) 次比较。

  • 平均时间复杂度:O(n²)

选择排序与冒泡排序类似,虽然时间复杂度相同,但它的性能在某些情况下略优,因为它的交换次数较少。

2.5 优缺点

  • 优点:实现简单,易于理解。不会像冒泡排序那样频繁交换元素,适用于交换成本较高的情况。是一种稳定的排序算法(如果在实现过程中做一些改进)。

  • 缺点:时间复杂度高,对于大规模数据的排序效率较低。即使数组已经是部分排序好的,选择排序仍然会进行相同次数的比较。

3. 冒泡排序与选择排序的对比

4. 总结

  • 冒泡排序 和 选择排序 都是简单易懂且实现容易的排序算法,但它们的效率都较低,时间复杂度为 O(n²),因此在大数据量的排序任务中并不推荐使用。

  • 冒泡排序 的交换次数相对较多,而 选择排序 尽管比较次数相同,但交换次数较少,稍微提高了性能。

  • 对于大规模数据的排序,通常推荐使用时间复杂度更低的排序算法,如 快速排序归并排序 或 堆排序

总之,冒泡排序和选择排序适合在教学、面试等场合使用,帮助理解基本排序原理。在实际应用中,面对大量数据时,可能需要选择更高效的排序算法。


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
经典排序算法:冒泡排序与选择排序_测试_测吧(北京)科技有限公司_InfoQ写作社区