当前位置: 首页 > news >正文

C语言基础15:冒泡排序

数组的典型应用:冒泡排序
向后冒泡
  • 思想:

    1.一次排好一个数,针对n个数,最差情况需要n - 1次就可以排好

    2.每次排序将相邻数据两两对比,将较大或者较小的数据向后交换,等所有数据比较完成,将较大或者较小的数就会出现在最后,这也是该数应该有的位置。

    3.在余下的数中,再次应用第二步的操作,直到只剩下1个数

向前冒泡
  • 思想:

    1.一次排好一个数,针对n个数,最差情况需要n - 1次就可以排好

    2.每次排序假定第一个元素是最大或者最小的,用第一个元素的后面的元素一一与第一个元素比较,遇到较大或者较小的和第一个元素交换,访问玩数组的最后一个元素,就排好一个数。

    3.在余下的数中,再次应用第2步的操作,直到只剩下1个数。

分析:

原始数列:1 2 3 4 5 → 5 4 3 2 1

排序轮数:5 1 2 3 4、5 4 1 2 3、5 4 3 1 2 、5 4 3 2 1 得到轮数:元素个数 - 1 = 4

比较次数:

​ ①1 2 3 4 5 → 5 1 2 3 4 (第一轮比4次)

​ ②1 2 3 4 5 → 5 4 1 2 3(第二轮比3次)

​ ③ 1 2 3 4 5 → 5 4 3 1 2 (第3轮比2次)5 -1 -2 = 2 5-2

​ ④ 1 2 3 4 5 → 5 4 3 2 1 (第4轮比1次)5 - 1 -3 = 1 5-3

​ 得到每一轮的比较次数:每一轮比较次数 = 元素个数 - 1 -轮数,轮数从0开始

代码:

/*************************************************************************
> File Name:demo03.c
> Author:zk
> Description: 冒泡排序
> Created Time: 2025年02月14日 星期五 14时44分57秒
************************************************************************/
#include <stdio.h>
int main(int argc,char *argv[])
{
    // 创建一个数组,用来存储排序的序列
    int arr[10];
    // 定义三个变量 i:比较的轮数(0~len-1)j:每一轮比较的次数(0~len-1-i)temp:临时变量,用来实
    现两个变量值的交换
        int i,j,temp;
    printf("请输入10个整数:\n");
    // 计算数组的大小
    int len = sizeof(arr) / sizeof(arr[0]);
    // 通过循环录入数据
    for(i = 0; i < len; i++)
    {
        scanf("%d",&arr[i]);
    }
    printf("\n");
    // 冒泡排序
    // 第一次循环:控制比较的轮数:轮数 = len -1;
    for(i = 0; i < len - 1; i++)
    {
        // 第二层循环:控制每一轮的比较次数:次数 = len - 1 - i
        for(j = 0; j < len - 1 - i; j++)
        {
            // 相邻两个数进行比较,满足条件交换位置
            if(arr[j] > arr[j+1]) // 1 2,可改变> <号实现向后向前冒泡排序
            {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    printf("冒泡排序后的数列:\n");
    for(i = 0; i < len; i++)
    {
        printf("%4d",arr[i]);
    }
    printf("\n");
    return 0;
}

相关文章:

  • Java 实现 AES 加密和解密
  • 数据结构:图;邻接矩阵和邻接表
  • 深度解析HTTP/HTTPS协议:从原理到实践
  • 3.buuctf [BSidesCF 2019]Kookie
  • 人工智障的软件开发-git仓库篇-弃gitlab,走gitea
  • 免费大模型网站
  • vue-model如何自定义指令,及批量注册自定义指令
  • 【Java】StringBuffer与StringBuilder详解
  • 数据库系统原理——第十一章并发控制复习题
  • Spring Boot 开发入门
  • 【设计模式】【结构型模式】装饰者模式(Decorator)
  • mysqld_exporter的搭建
  • webstorm提示ESlint: please specify Node.js interpreter
  • 前端面试手写--虚拟列表
  • Python实现语音识别详细教程【2025】最新教程
  • Ollama 开发指南
  • 应用层协议 HTTP 讲解实战:从0实现HTTP 服务器
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_time_update函数
  • NAC网络接入控制三种认证方式802.1X认证、MAC认证和Portal认证
  • Python 文本探秘:正则表达式的易错迷宫穿越 -- 7. 正则表达式
  • 深观察丨从“不建议将导师挂名为第一作者”说开去
  • 亮剑浦江丨上海网信部门处罚一批医疗服务类互联网企业,三大类问题值得关注
  • 扎克伯格怕“错过风口”?Meta AI数字伴侣被允许与未成年人讨论不当话题
  • 独家丨申万宏源研究所将迎来新所长:首席策略分析师王胜升任
  • “下山虎”张名扬一回合摘下“狮心”:你们再嘘一个给我听听
  • 网络游戏用户规模和市场销售创新高,知识产权保护面临哪些挑战?