冒泡排序(c语言实现)

一、概述

冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表,一次比较两个元素,并按照顺序交换它们,直到整个列表排序完成。

二、冒泡排序的过程

  1. 首先,将待排序的列表按照原始顺序进行展示。
  2. 从列表的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。 就像水中的泡泡一样,大的泡泡会慢慢浮出水面,所以称为冒泡排序。
  3. 继续进行相邻元素的比较和交换,直到整个列表的末尾。
  4. 一次完整的遍历将会将列表中最大的元素移动到最后一个位置。
  5. 重复步骤2至4,直到整个列表排序完成。

三、过程图解

  • 第一个元素的排序过程如下:

四、代码实现

  • 下面是用C语言实现冒泡排序的代码示例:
c 复制代码
#include <stdio.h>

void Bubble_Sort(int arr[], int sz)
{
    for (int i = 0; i < sz - 1; i++)
    {
        for (int j = 0; j < sz - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                // 交换arr[j]和arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

void Print_Array(int arr[], int sz)
{
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    int arr[] = { 64, 34, 25, 12, 22, 11, 90 };
    int sz = sizeof(arr) / sizeof(arr[0]);//计算数组中的元素个数

    printf("原始数组:");
    Print_Array(arr, sz);

    Bubble_Sort(arr, sz);

    printf("排序后的数组:");
    Print_Array(arr, sz);

    return 0;
}

运行结果:

复制代码
原始数组:64 34 25 12 22 11 90 
排序后的数组:11 12 22 25 34 64 90 

在冒泡排序中,外层循环控制排序的轮数,内层循环用于比较并交换相邻的元素。通过多次执行内层循环,最大的元素会逐渐"冒泡"到数组的末尾,从而实现排序。

值得注意的是,冒泡排序的时间复杂度是O(n^2),没有使用额外的空间,是一种原地排序算法。

相关推荐
快乐肚皮10 分钟前
快速排序:分治思想的经典实践
java·算法·排序算法
一线大码12 分钟前
SpringBoot 和 MySQL 的事务隔离级别关系
spring boot·后端·mysql
罗政43 分钟前
基于 SpringBoot + Vue 在线点餐系统(前后端分离)
vue.js·spring boot·后端
曼岛_1 小时前
[架构之美]深入优化Spring Boot WebFlux应用
spring boot·后端·架构
我命由我123451 小时前
STM32 开发 - 中断案例(中断概述、STM32 的中断、NVIC 嵌套向量中断控制器、外部中断配置寄存器组、EXTI 外部中断控制器、实例实操)
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·嵌入式
雨果talk1 小时前
【一文看懂Spring循环依赖】Spring循环依赖:从陷阱破局到架构涅槃
java·spring boot·后端·spring·架构
想躺平的咸鱼干1 小时前
Elasticsearch 的自动补全以及RestAPI的使用
java·后端·elasticsearch·中间件·intellij-idea
bobz9651 小时前
k8s 内存预留
后端
宋一平工作室2 小时前
单片机队列功能模块的实战和应用
c语言·开发语言·stm32·单片机·嵌入式硬件
SY师弟2 小时前
台湾TEMI协会竞赛——2、足球机器人组装教学
c语言·单片机·嵌入式硬件·机器人·嵌入式·台湾temi协会