Bubble Sort

简介: Bubble Sort“【5月更文挑战第19天】”

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

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,就像水中的气泡一样。

以下是冒泡排序算法的详细步骤:

  1. 开始排序:从数列的第一个元素开始,比较相邻的两个元素。

  2. 比较和交换:如果第一个元素比第二个元素大,则交换它们的位置。这样,经过第一轮比较后,数列中最大的元素会被放到它最终应该在的位置(即数列的最后一个位置)。

  3. 重复比较:继续比较下一对相邻元素,同样进行交换如果需要。重复这个过程,直到你到达数列的末尾。

  4. 一轮完成:完成第一轮遍历后,最大的元素已经定位,剩下的未排序部分是数列的前 n-1 个元素(假设数列长度为 n)。

  5. 重复过程:对剩余的未排序部分重复上述过程,每一轮都会将次大的元素放到它最终应该在的位置。

  6. 优化(可选):如果在一轮遍历中没有发生任何交换,这意味着数列已经排序完成,可以提前结束算法。

  7. 结束条件:当进行到只剩下一个元素时,排序完成。

以下是冒泡排序的伪代码示例:

procedure bubbleSort( A : list of sortable items )
    n = length(A)
    repeat
        swapped = false
        for i = 1 to n-1 inclusive do
            if A[i] > A[i+1] then
                swap( A[i], A[i+1] )
                swapped = true
            end if
        end for
        n = n - 1
    until not swapped
end procedure

冒泡排序算法的时间复杂度是 O(n^2),在最坏的情况下(即数列完全逆序)需要进行 n*(n-1)/2 次比较和交换。在最好的情况下(数列已经是排序状态),时间复杂度是 O(n),因为每轮遍历都不会发生交换,算法会在第一轮就检测到这一点并结束。

目录
相关文章
|
24天前
|
搜索推荐
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
12 1
|
6月前
|
搜索推荐 算法 Java
sort-01-bubble sort 冒泡排序算法详解
这是一个关于排序算法的系列文章摘要。作者整理了10种不同的排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。文章详细介绍了冒泡排序的工作原理、流程,并提供了代码实现,强调了在实现中考虑的改进点,如统一接口、实用性增强和日志输出。此外,还提供了一个排序接口和工具类以方便使用,并通过测试代码和日志展示了排序过程。整个系列旨在帮助读者理解和掌握排序算法。相关代码已开源在GitHub。
|
6月前
|
搜索推荐 算法 Java
sort-07-merge sort 归并排序
这是一个关于排序算法的系列文章摘要。文章涵盖了多种排序算法的详细解释,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序以及大文件外部排序。归并排序是一种效率为O(nlogn)的排序算法,基于分治法,将序列分成两半,分别排序后再合并。文章提供了Java实现的递归和迭代版本。在归并排序的递归实现中,代码通过不断拆分和合并子序列完成排序,而迭代实现则是通过逐步增大子序列长度并进行两两归并来排序。整个系列可在GitHub找到相关源码。
|
6月前
|
存储 分布式计算 搜索推荐
sort-10-bigfile sort 大文件外部排序
这是一个关于排序算法系列的概述,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。大文件排序通过文件拆分、独立排序、合并排序和优化合并步骤实现,尤其适用于不能一次性加载到内存中的数据。该方法的时间复杂度为O(n log n),空间复杂度为O(n)。文章提供了一个Java实现的`BigFileSort`类,用于大文件的排序操作。代码中使用了归并排序的策略进行合并,并考虑了磁盘I/O的影响。完整代码可在GitHub的开源项目中找到。
|
6月前
|
搜索推荐 算法 Java
sort-02-QuickSort 快速排序到底快在哪里?
这是一个关于排序算法的系列文章的摘要。文章详细介绍了各种排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序以及处理大文件的外部排序。特别强调了快速排序,它是1959年由Tony Hoare发明的,平均时间复杂度为O(n log n),优于其他如合并排序和堆排序。快速排序采用分而治之的策略,选取基准元素,通过分区操作将数组分成两部分,然后递归地对这两部分进行排序。文章还通过示例和Java代码解释了快速排序的步骤和实现。最后,提供了开源项目的链接,供读者进一步学习和研究。
|
NoSQL Redis
SORT
SORT
96 0
|
搜索推荐 C++
sort()函数详解
sort()函数详解
112 0
|
存储 算法 搜索推荐
|
人工智能 算法 搜索推荐
|
搜索推荐 算法 数据可视化
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
112 0
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)