C语言:冒泡排序算法的原理

可以使用不同的排序算法来对数组元素进行从小到大的排序。下面是一个使用冒泡排序算法的示例:

冒泡排序算法:

冒泡排序是一种简单的排序算法,它多次遍历要排序的列表,每次遍历都将相邻的两个元素进行比较并交换,直到整个列表排序完成。

c 复制代码
#include <stdio.h>

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i ; 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;
            }
        }
    }
}

for (int j = 0; j < n - 1 - i ; j++) 循环第1次 相邻两个对比大小对换位置

64,25,12,22,11

25,64,12,22,11

25,12,64,22,11

25,12,22,64,11

25,12,22,11,64

for (int j = 0; j < n - 1 - i ; j++) 循环第2次 相邻两个对比大小对换位置

25,12,22,11,64

12,25,22,11,64

12,22,25,11,64

12,22,11,25,64

for (int j = 0; j < n - 1 - i ; j++) 循环第3次 相邻两个对比大小对换位置

12,22,11,25,64

12,11,22,25,64

for (int j = 0; j < n - 1 - i ; j++) 循环第4次 相邻两个对比大小对换位置

12,11,22,25,64

11,12,22,25,64

c 复制代码
int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);

    bubbleSort(arr, n);

    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

这个示例演示了如何使用冒泡排序算法对一个数组进行排序。你可以替换算法或使用其他排序算法,如快速排序、插入排序等来对数组进行排序。

冒泡排序算法的原理

冒泡排序是一种基础的排序算法,其原理比较简单。它重复地遍历要排序的列表,每次遍历都比较相邻的两个元素,如果它们的顺序不符合要求(比如要求从小到大排序,但两个元素的顺序是大于小),则交换这两个元素的位置,直到整个列表排序完成。

冒泡排序的步骤:

比较相邻元素:从第一个元素开始,依次比较当前元素与下一个元素的大小。

交换位置:如果当前元素大于下一个元素(对于升序排序),则交换它们的位置。

遍历完一次:一次遍历后,最大(或最小)的元素会被移到最后一个位置,下次遍历时不再考虑已经排序好的部分。

重复遍历:重复执行上述步骤,每次遍历都会将剩余未排序部分中最大(或最小)的元素放置到正确的位置。

示例:

考虑一个数组 64, 25, 12, 22, 11 进行从小到大的冒泡排序:

第一次遍历后,最大的元素 64 被放置到最后 25, 12, 22, 11, 64。

第二次遍历后,剩余部分中最大的元素 25 被放置到倒数第二个位置 12, 22, 11, 25, 64。

重复这个过程直到所有元素都排好序。

冒泡排序是一种简单但效率较低的排序算法,特别是对于大型数据集合。每一轮遍历都会把一个最大(或最小)的元素放到正确的位置,因此需要进行多次遍历,时间复杂度为 O(n^2),其中 n 是要排序的元素数量。但它易于理解和实现,并且对于小型数据集合来说是一个简单的选择。

相关推荐
企业数字化笔记39 分钟前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!1 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君6584 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧4 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
水饺编程4 小时前
第2章:Linux 基础,切换用户
linux·c语言·汇编
Shimeri5 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J5 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang5 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
知识分享小能手5 小时前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
爱读书的小胖5 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节