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日

相关文章

  • JavaScript实现经典排序算法之冒泡排序

    JavaScript实现经典排序算法之冒泡排序 什么是冒泡排序? 冒泡排序是一种简单的排序算法,从序列左侧开始比较两个相邻的元素,如果顺序不对就交换位置,直到序列末尾,这样一次遍历后,序列最后一个元素就是当前序列最大值。然后对剩余序列重复上述过程,直到整个序列有序。 算法实现 我们来看看如何用JavaScript实现冒泡排序。 function bubble…

    算法与数据结构 2023年5月19日
    00
  • JS中的算法与数据结构之列表(List)实例详解

    首先,列表(List)是一种非常常见且重要的数据结构,用于存储一组顺序排列的数据。在JavaScript中,可以通过数组来实现列表。 具体来说,我们可能会涉及到一些常用的列表操作,例如: 在数组尾部添加一个元素 在数组特定位置插入一个元素 从数组中删除指定元素 获取数组中指定位置的元素 下面,我们将结合代码示例,一一介绍这些操作: 在数组尾部添加一个元素 在…

    算法与数据结构 2023年5月19日
    00
  • 利用C++的基本算法实现十个数排序

    利用C++的基本算法实现十个数排序 1. 算法选择 排序问题常见的算法有冒泡排序、插入排序、选择排序、快速排序等,它们的时间复杂度不尽相同,但在本题目的情况下,十个数的排序任何算法都可以。 为了方便,本文将使用最简单的冒泡排序算法。 2. 代码实现 冒泡排序算法的基本思路是从头到尾扫描一遍数组,比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们…

    算法与数据结构 2023年5月19日
    00
  • c# 冒泡排序算法(Bubble Sort) 附实例代码

    冒泡排序算法(Bubble Sort) 冒泡排序算法是比较简单的排序算法之一,它通过多次比较和交换相邻两个元素的位置,将整个序列逐步变得有序,因此也被称为“泡沫排序”。 算法步骤: 从序列的第一个元素开始,与第二个元素进行比较,如果第一个元素大于第二个元素,则交换这两个元素; 接着再与第三个元素进行比较,如果第二个元素大于第三个元素,则交换这两个元素; 以此…

    算法与数据结构 2023年5月19日
    00
  • C++ sort排序之降序、升序使用总结

    C++ sort排序之降序、升序使用总结 介绍 sort函数是C++ STL库提供的一种排序函数,可以快速方便地对数组或容器进行排序。本文将详细介绍sort函数的用法,包括排序方式、自定义比较函数和对容器的排序等内容。 基本用法 sort函数的声明如下: template <class RandomAccessIterator> void sor…

    算法与数据结构 2023年5月19日
    00
  • Python实现的最近最少使用算法

    Python实现最近最少使用算法 最近最少使用算法(Least Recently Used,LRU)是一种缓存淘汰策略,用于在缓存已满时选择要被淘汰的缓存块。该算法的基本思想是,当缓存已满时,淘汰最近最少使用的缓存块。 下面我们将通过python代码实现LRU算法的主要思想,并提供两个示例说明。 算法思路 LRU算法需要同时维护两个数据结构。 记录最近访问顺…

    算法与数据结构 2023年5月19日
    00
  • 算法之排序算法的算法思想和使用场景总结

    算法之排序算法的算法思想和使用场景总结 一、引言 排序算法是计算机科学基础中的一个重要的部分。随着数据规模的增大,如何高效地对数据进行排序也成为了计算机科学中的重要问题。各种排序算法针对不同的数据结构和数据规模,具有不同的时间和空间复杂度。通过了解不同的排序算法的算法思想和使用场景,可以帮助我们更好地选择合适的排序算法。 二、排序算法的分类 常见的排序算法可…

    算法与数据结构 2023年5月19日
    00
  • 图解Java中归并排序算法的原理与实现

    图解Java中归并排序算法的原理与实现 什么是归并排序 归并排序是一种经典的排序算法,它的基本思想是通过将待排序序列不停地划分成两个子序列,将每个子序列排序后再将其合并,直到最终合并为一个有序的序列。 归并排序的原理 划分过程 首先将待排序序列分为两个长度相等的子序列,然后对每个子序列进行排序。 合并过程 合并两个有序的子序列,生成一个有序的子序列。重复此过…

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