选择排序与冒泡排序

一、选择排序

选择排序是一种简单直观的排序算法。它的工作原理是首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

步骤:

  1. 从第一个位置开始,找到该位置后面(未排序部分)的最小(或最大)元素。
  2. 将该元素与第一个位置上的元素交换。
  3. 对第二个位置及其后面的元素重复步骤1和2,直到最后一个位置。

特点:

  • 选择排序是不稳定的排序方法(比如序列[5,5,3]第一次找到5会和第一个5交换,导致第一个5移到了第二个5后面,所以选择排序不是稳定的排序算法)。
  • 时间复杂度为O(n^2),其中n是待排序元素的数量。因此,它不适用于大数据量的排序。
  • 空间复杂度为O(1),因为排序过程中只需要常数个额外空间来存储临时变量。

示例代码(Python):

def selection_sort(arr):  
    for i in range(len(arr)):  
        min_idx = i  
        for j in range(i+1, len(arr)):  
            if arr[j] < arr[min_idx]:  
                min_idx = j  
        arr[i], arr[min_idx] = arr[min_idx], arr[i]  
    return arr
二、冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

步骤:

  1. 从第一个元素开始,比较相邻的两个元素。如果前一个元素比后一个元素大(或需要按照降序排列则是前一个元素比后一个元素小),则交换它们的位置。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

特点:

  • 冒泡排序是稳定的排序方法(相同的元素在排序后不会改变相对次序)。
  • 时间复杂度在最坏和平均情况下都是O(n^2),但在最好情况下(输入序列已经有序)是O(n)。
  • 空间复杂度为O(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
总结:

选择排序和冒泡排序都是基础的排序算法,它们虽然简单易懂,但在处理大数据量时效率较低。在实际应用中,通常会使用更高效的排序算法,如归并排序、快速排序等。然而,理解这些基础算法对于学习更复杂的排序算法和数据结构至关重要。

相关推荐

  1. 选择排序冒泡排序

    2024-04-02 06:20:01       35 阅读
  2. 冒泡排序选择排序--C语言

    2024-04-02 06:20:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 06:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 06:20:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 06:20:01       82 阅读
  4. Python语言-面向对象

    2024-04-02 06:20:01       91 阅读

热门阅读

  1. Day4:学习尚上优选项目

    2024-04-02 06:20:01       36 阅读
  2. redis中怎么用分布式token

    2024-04-02 06:20:01       37 阅读
  3. Docker

    2024-04-02 06:20:01       35 阅读
  4. leetcode414-Third Maximum Number

    2024-04-02 06:20:01       33 阅读
  5. SpringBoot + Redis 实现接口限流,一个注解的事

    2024-04-02 06:20:01       35 阅读
  6. AJAX:XHR(XMLHttpRequest)与Fetch的区别与使用

    2024-04-02 06:20:01       32 阅读
  7. 了解监控易(14):中间件监控

    2024-04-02 06:20:01       33 阅读
  8. 766. 托普利茨矩阵

    2024-04-02 06:20:01       30 阅读
  9. MT4数据分析:如何利用历史数据指导未来投资

    2024-04-02 06:20:01       32 阅读
  10. 设计模式(13):模板方法模式

    2024-04-02 06:20:01       40 阅读