C语言 冒泡排序算法详解及实例

冒泡排序算法详解及实例

什么是冒泡排序算法

冒泡排序是一种很基础的排序算法,它通过从序列的一端开始,依次比较相邻两个元素的大小,如果它们的顺序不对,就交换它们的位置,直到把整个序列排序完成。冒泡排序算法的时间复杂度为O(n^2),所以它并不适合排序规模很大的序列。

冒泡排序算法的实现

冒泡排序算法的实现很简单,其核心代码如下:

void bubble_sort(int *a, int n)
{
    int i, j, tmp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (a[j] > a[j + 1])
            {
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}

上面的代码中,a是待排序的数组,n是数组的长度。外层循环控制排序的轮数,内层循环控制每轮比较的次数。在每次比较时,如果前一个元素的值比后一个元素的值大,就交换它们的位置。

冒泡排序算法的示例

我们通过两个示例来说明冒泡排序算法的用法。

示例1:对整数数组进行排序

#include <stdio.h>

void bubble_sort(int *a, int n);

int main()
{
    int a[] = {3, 2, 7, 4, 1, 5, 8, 6};
    int n = sizeof(a) / sizeof(int);
    int i;

    printf("Before sorting: ");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);

    bubble_sort(a, n);

    printf("\nAfter sorting: ");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);

    return 0;
}

void bubble_sort(int *a, int n)
{
    int i, j, tmp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (a[j] > a[j + 1])
            {
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}

运行上面的代码,输出结果如下:

Before sorting: 3 2 7 4 1 5 8 6 
After sorting: 1 2 3 4 5 6 7 8

示例2:对字符串数组进行排序

#include <stdio.h>
#include <string.h>

void bubble_sort(char *a[], int n);

int main()
{
    char *a[] = {"apple", "orange", "banana", "kiwi", "grape"};
    int n = sizeof(a) / sizeof(char *);
    int i;

    printf("Before sorting: ");
    for (i = 0; i < n; i++)
        printf("%s ", a[i]);

    bubble_sort(a, n);

    printf("\nAfter sorting: ");
    for (i = 0; i < n; i++)
        printf("%s ", a[i]);

    return 0;
}

void bubble_sort(char *a[], int n)
{
    int i, j;
    char *tmp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (strcmp(a[j], a[j + 1]) > 0)
            {
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}

运行上面的代码,输出结果如下:

Before sorting: apple orange banana kiwi grape 
After sorting: apple banana grape kiwi orange

上面的代码将字符串数组按照字典序进行排序。

总结

冒泡排序算法虽然很简单,但是它是一种基础的排序算法,很多其他排序算法的实现都是在它的基础上做出改进的。在实际开发中,如果需要对规模比较小的数组进行排序,冒泡排序是一个不错的选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 冒泡排序算法详解及实例 - Python技术站

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

相关文章

  • PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    PHP排序算法之冒泡排序(Bubble Sort)实现方法详解 冒泡排序概述 冒泡排序是一种基本的排序算法,它的基本思想是比较相邻的两个元素,如果前一个元素比后一个元素大,就交换这两个元素,重复进行这个过程,直到没有任何一对元素需要比较为止。冒泡排序得名于通过交换相邻的元素来把最大值“冒泡”到数列的尽头。 冒泡排序的时间复杂度为O(n²),效率较低,但其思想…

    算法与数据结构 2023年5月19日
    00
  • 深入解析桶排序算法及Node.js上JavaScript的代码实现

    深入解析桶排序算法及Node.js上JavaScript的代码实现 桶排序算法介绍 桶排序算法是一种非常有效的排序方法,通常用于在已知数据范围的情况下对数据进行排序。桶排序将数据分配到一个或多个桶中,然后对每个桶中的数据进行排序,最后将所有桶中的数据依次合并即可得到有序的结果。 桶排序的时间复杂度为O(n),其中n为待排序的数据个数。如果数据范围较大,需要分…

    算法与数据结构 2023年5月19日
    00
  • C++堆排序算法的实现方法

    C++堆排序算法的实现方法 堆排序是一种高效的排序算法,使用一定程度的空间复杂度换来更快的时间复杂度。下面将详细讲解C++中堆排序算法的实现方法。 算法实现步骤: 将待排序数组构建成一个二叉堆。 将堆顶元素与堆底元素进行交换。 对除了堆底元素以外的堆进行调整,使其重新成为一个新的堆。 重复2、3步骤,直到整个数组排序完成。 代码实现 C++中STL容器提供了…

    算法与数据结构 2023年5月19日
    00
  • java排序算法图文详解

    Java排序算法图文详解 在Java编程中,排序算法是非常重要且常见的一部分。本文将详细讲解Java中的各种排序算法及其实现,帮助读者了解不同算法的特点和使用场景,提高程序的效率和可读性。 排序算法分类 在Java中,常用的排序算法主要可以分为以下几类: 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 冒泡排序 冒泡排序是一种简单的排序算法,其原理…

    算法与数据结构 2023年5月19日
    00
  • 2020年新浪最新PHP试题和答案解析

    2020年新浪最新PHP试题和答案解析攻略 作为新浪最新的PHP试题,本门考试难度较高。以下是一些考试攻略以及答案解析。 试题分析 本次试题由多道选择题和编程题组成,主要考察PHP语言基础、框架使用、数据库操作等方面的知识。 选择题 本次选择题共15道,主要考察PHP基础语法、函数使用、面向对象编程、异常处理等方面的知识。 编程题 本次编程题共2道,主要考察…

    算法与数据结构 2023年5月19日
    00
  • C语言 扩展欧几里得算法代码

    下面我来为你详细讲解一下“C语言 扩展欧几里得算法代码”的完整攻略。 什么是扩展欧几里得算法? 扩展欧几里得算法是求解两个整数 a、b 的最大公约数(Greatest Common Divisor,简称 GCD)的一种算法。该算法可以不仅计算出最大公约数,还可以得到一组关于 a、b 的贝祖等式的整数解和一些运算过程。 算法流程 扩展欧几里得算法的流程如下: …

    算法与数据结构 2023年5月19日
    00
  • PHP中数组的三种排序方法分享

    当我们处理大量数据时,数组是非常有用的数据结构。排序是数组常见的操作之一,PHP中提供了三种常用的排序方法,分别是冒泡排序、快速排序和插入排序。接下来,本文将详细介绍这三种方法的实现过程和使用方法。 冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数组,每次比较相邻两个元素,如果顺序不对就交换它们。这样一趟遍历后,就能把最大(或最小)的元素移到最…

    算法与数据结构 2023年5月19日
    00
  • c++插入排序详解

    c++插入排序详解 1. 插入排序算法介绍 插入排序法是一种简单直观的排序方法。它的基本思路是通过每次将一个待排序的元素按照其大小插入到已经排好序的一组元素中,直到全部元素插入完毕,即排序完毕。 在实际应用中,对于较小的数据集,插入排序通常比快速排序和归并排序等复杂度为O(nlogn)的算法执行效率更高。 2. 插入排序算法的实现 下面给出一个C++实现的插…

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