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

yizhihongxing

冒泡排序算法详解及实例

什么是冒泡排序算法

冒泡排序是一种很基础的排序算法,它通过从序列的一端开始,依次比较相邻两个元素的大小,如果它们的顺序不对,就交换它们的位置,直到把整个序列排序完成。冒泡排序算法的时间复杂度为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日

相关文章

  • 合并排序(C语言实现)

    合并排序(C语言实现) 合并排序是一种将待排序序列分成多个子序列,分别进行排序,然后再将排序后的子序列合并成整体有序序列的排序算法。使用递归实现时,该算法的时间复杂度为O(nlogn),因此被广泛应用。 实现步骤 合并排序可以用以下步骤来实现: 分治:将待排序序列从中间分成两部分,递归地对左右两部分进行排序。 合并:将两个有序子序列合并成一个有序序列。 在实…

    算法与数据结构 2023年5月19日
    00
  • C语言常见排序算法之插入排序(直接插入排序,希尔排序)

    接下来我将为大家详细讲解“C语言常见排序算法之插入排序(直接插入排序, 希尔排序)”。 直接插入排序 算法思路 直接插入排序算法的实现思路是:将一个无序的数据序列分为一个有序子序列和一个无序子序列两部分,将无序子序列的元素一个一个插入到有序子序列中,直到插入完所有元素,最终形成一个新的有序序列。在具体编写代码时,我们会将数据序列看作是一个数组来进行操作。 代…

    算法与数据结构 2023年5月19日
    00
  • 算法系列15天速成 第一天 七大经典排序【上】

    我会为你详细讲解“算法系列15天速成 第一天 七大经典排序【上】”的完整攻略。 标题 算法系列15天速成 第一天 七大经典排序【上】 内容 本文主要介绍了常用的七大经典排序算法,分别是插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序以及堆排序。对每个算法的特点、实现过程和时间复杂度进行了详细的讲解,同时也对每个算法进行了简单的示例说明。 插入排序 …

    算法与数据结构 2023年5月19日
    00
  • 算法系列15天速成 第二天 七大经典排序【中】

    下面我就详细讲解“算法系列15天速成 第二天 七大经典排序【中】”的完整攻略。 1. 概述 本篇文章主要介绍七大经典排序算法,分别是插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序。本文将详细讲解每种排序算法的思路和实现方法,并会给出每种算法的优缺点以及适用场合。 2. 插入排序 插入排序是一种简单直观的排序算法。它的基本思想是,将一个数据…

    算法与数据结构 2023年5月19日
    00
  • c语言实现冒泡排序、希尔排序等多种算法示例

    当涉及到算法时,实现该算法的语言是一个非常重要的话题。为了帮助初学者理解和重视这一问题,我们提供了“c语言实现冒泡排序、希尔排序等多种算法示例”的完整攻略。 什么是排序算法? 首先,让我们讨论一下排序算法的基本概念。在计算机科学中,排序是一种重要的算法,其目的是将一组数据按照特定的顺序排列。常见的排序算法有冒泡排序、希尔排序、快速排序等。 冒泡排序和希尔排序…

    算法与数据结构 2023年5月19日
    00
  • php实现快速排序的三种方法分享

    那么现在我将为您介绍“php实现快速排序的三种方法分享”的完整攻略。 什么是快速排序 快速排序(Quick Sort)通常被认为是对冒泡排序的一种改进。在冒泡排序中,需要进行多次的数据比较和交换操作,而快速排序与其不同之处在于它通过一个基准值将待排序的数组分成两个部分。在计算机领域,快速排序是一种常见的排序算法。 快速排序的常规实现思路 快速排序的常规实现思…

    算法与数据结构 2023年5月19日
    00
  • JS实现的全排列组合算法示例

    下面针对 “JS实现的全排列组合算法示例” 给出完整攻略。 什么是全排列组合算法? 全排列组合是指将一个集合中的元素排成一列,可以有不同的排列方式,这些不同的排列方式就称为全排列。当从这个集合中取出一部分排成一列时,称为排列,而取出一部分组合称为组合。 JS实现全排列组合算法的步骤 具体实现全排列组合算法的步骤如下: 定义需要排列和组合的数组或字符串; 定义…

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

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

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