手把手教你搞懂冒泡排序和选择排序

手把手教你搞懂冒泡排序和选择排序

冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的数据为止。

算法流程

  1. 比较相邻的元素。如果当前的元素大于下一个元素,则交换它们的位置。
  2. 对每一对相邻元素都执行步骤 1,从开始第一对到结尾最后一对。在这步操作后,最后的元素会是最大的数。
  3. 针对所有的元素重复执行步骤 1~2,除了最后一个。
  4. 重复步骤 1~3,直到排序完成。

代码实现

以下是冒泡排序的Python实现示例代码:

def bubble_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # Last i elements are already sorted
        for j in range(0, n-i-1):
            # Swap if the element found is greater than the next element
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]

示例说明

假设有一个数组 [64, 34, 25, 12, 22, 11, 90] 需要进行冒泡排序,其排序流程如下表所示:

初始数组 第一轮冒泡排序 第二轮冒泡排序 第三轮冒泡排序 ... 最终排序结果
[64, 34, 25, 12, 22, 11, 90] [34, 25, 12, 22, 11, 64, 90] [25, 12, 22, 11, 34, 64, 90] [12, 22, 11, 25, 34, 64, 90] ... [11, 12, 22, 25, 34, 64, 90]

选择排序

选择排序(Selection Sort)是一种简单直观的排序算法。其基本思想是每次选择最小的元素放到已排序的队列末尾。

算法流程

  1. 首先在未排序的序列中找到最小(大)元素,存放到排序序列的起始位置。
  2. 再从剩余未排序的元素中继续寻找最小(大)元素,放到已排序的序列的末尾。
  3. 重复步骤 2,直到所有的元素均排序完毕。

代码实现

以下是选择排序的Python实现示例代码:

def selection_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # 查找最小元素的位置
        min_idx = i
        for j in range(i+1, n):
            if arr[min_idx] > arr[j]:
                min_idx = j
        # 将找到的最小元素交换到当前位置
        arr[i], arr[min_idx] = arr[min_idx], arr[i]

示例说明

假设有一个数组 [64, 34, 25, 12, 22, 11, 90] 需要进行选择排序,其排序流程如下表所示:

初始数组 第一轮选择排序 第二轮选择排序 第三轮选择排序 ... 最终排序结果
[64, 34, 25, 12, 22, 11, 90] [11, 34, 25, 12, 22, 64, 90] [11, 12, 25, 34, 22, 64, 90] [11, 12, 22, 34, 25, 64, 90] ... [11, 12, 22, 25, 34, 64, 90]

总结

冒泡排序和选择排序都是简单但低效的排序算法,它们的时间复杂度都是O(n^2)。尽管如此,在某些情况下,比如对于简单的数据结构或是小规模的数据,这些排序算法可能是最优的选择。为了更加高效地排序,我们需要学习更加高级和复杂的排序算法,比如快速排序、归并排序等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你搞懂冒泡排序和选择排序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • PHP实现根据数组某个键值大小进行排序的方法

    在PHP中,可以使用内置函数 array_multisort() 来对数组进行排序,并且可以根据某个键值的大小进行排序。下面是实现的步骤: 步骤一:准备数组 首先,需要准备一个包含多个元素的数组。每个元素都是一个关联数组,包含多个键值对。本例中,我们以元素数组中的 age 键值作为排序标准。 示例: $people = array( array("…

    算法与数据结构 2023年5月19日
    00
  • C语言深入探究直接插入排序与希尔排序使用案例讲解

    C语言深入探究直接插入排序与希尔排序使用案例讲解 直接插入排序 算法描述 直接插入排序的基本思想是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录数增加1的有序表。具体算法流程如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排…

    算法与数据结构 2023年5月19日
    00
  • JS栈stack类的实现与使用方法示例

    JS栈Stack类的实现与使用方法示例 一、栈的概念 栈(stack)是一种线性数据结构,它有两个主要操作:入栈(push)和出栈(pop)。栈的特点是先进后出(FILO,First In, Last Out)。从数据结构的角度来说,栈是在同一端进行插入和删除操作的一种数据结构。该端被称为栈顶,相对地,把另一端称为栈底。 在计算机科学中,栈具有非常重要的作用…

    算法与数据结构 2023年5月19日
    00
  • C语言简单实现快速排序

    C语言简单实现快速排序 什么是快速排序? 快速排序(Quicksort)是一种分治的排序算法,由Tony Hoare于1960年提出。快速排序使用两个指针i,j分别指向待排序数组的最左侧和最右侧,以一个值作为基准(pivot),一般为数组的中间值。快速排序的主要思路是将数组中小于基准值的数放到基准值左边,将大于基准值的数放到右边。然后通过递归的方式,对左右两…

    算法与数据结构 2023年5月19日
    00
  • 逐步讲解快速排序算法及C#版的实现示例

    逐步讲解快速排序算法及C#版的实现示例 1. 快速排序算法简介 快速排序算法是一种高效的排序算法,它的时间复杂度为 $O(nlogn)$。它的基本思想是通过一次划分将原问题分解为两个子问题,再对子问题进行递归解决,最终得到排序结果。 2. 快速排序算法核心思想 快速排序算法的核心思想是选取一个基准元素,将待排序的序列分成两部分,一部分比基准元素小,一部分比基…

    算法与数据结构 2023年5月19日
    00
  • JS简单数组排序操作示例【sort方法】

    JS简单数组排序操作示例【sort方法】 操作说明 在JavaScript中,通过数组的sort()方法可以对数组进行排序操作。sort()方法会直接对原数组进行排序,返回排序后的原数组。 sort()方法通常需要传入一个比较函数,来指定排序规则。比较函数接收两个参数,分别表示待比较的两个元素,如果返回值小于0,则表示第一个元素排在第二个元素前面;如果返回值…

    算法与数据结构 2023年5月19日
    00
  • 数据排序谁最快(javascript中的Array.prototype.sort PK 快速排序)

    首先,我们需要明确两个概念:Array.prototype.sort 和 快速排序算法。 Array.prototype.sort() 是 JavaScript 数组原生的排序方法,可以用于将数组中的元素按照某种规则进行排序。而快速排序算法则是一种高效的排序算法,其核心思想是通过递归将数组拆分成多个小数组,然后依次对这些小数组进行排序。 Array.prot…

    算法与数据结构 2023年5月19日
    00
  • JS实现的计数排序与基数排序算法示例

    可能需要先说明一下,计数排序和基数排序都是针对整数排序的算法。 1. 计数排序 计数排序的基本思想是将每个元素出现的次数统计出来,并按顺序排列。计数排序不是基于元素比较的,而是建立在元素的值域范围较小的前提下的。因此,计数排序的时间复杂度是O(n+k),其中k是元素的值域大小。 算法步骤 统计每个数字出现的次数,得到一个长度为k的计数数组。 将计数数组进行变…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部