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

Linux基础30-C语言篇之冒泡排序【入门级】

数组的典型应用:冒泡排序
向后冒泡
  • 思想:
    • 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好
    • 每次排序将相邻数据两两比较,将较大或者较小的数据向后交换,等所有数据比较完成,较大或者较小的数就会出现在最后,这也是该数应该有的位置
    • 在余下的数中,再次应用第2步的操作,直到只剩下1个数。
向前冒泡
  • 思想:
    • 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好
    • 每次排序假定第一个元素是最大或者最小的,用第一个元素的后面的元素一一与第一个元素比较,遇到较大或者较小的和第一个元素交换,访问完数组的最后一个元素,就排好了一个数
    • 在余下的数中,再次应用第2步的操作,直到只剩下1个数。
向前冒泡

原始数列:12345->54321

排序轮数:51234-54123-54312-54321得到:轮数=元素个数-1=4

比较次数:

​ ①1 2 3 4 5 5 1 2 3 4(第1轮比4次)5 -1 -0= 4 5-0

​ ② 1 2 3 4 55 41 2 3(第2轮比3次)5 - 1 -1 = 3 5 -1

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

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

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

代码:

 #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;
 }

http://www.kler.cn/a/562843.html

相关文章:

  • 如何在开发中更好地使用DeepSeek:从入门到精通
  • Linux网络基础(协议 TCP/IP 网络传输基本流程 IP VS Mac Socket编程UDP)
  • python处理文件(完成文件分类)
  • RMAN备份恢复典型案例——数据库卡顿
  • 跟着 Lua 5.1 官方参考文档学习 Lua (9)
  • 事务的4个特性和4个隔离级别
  • QT初学——helloworld
  • 绕过过滤order by
  • 20分钟 Bash 上手指南
  • 机器学习介绍与数据集
  • leetcode 1392. 最长快乐前缀
  • 力扣 3248. 矩阵中的蛇(Java实现)
  • Spring Boot中Bean Validation的实战应用
  • 几种AI模型在算法工作中的使用测评——Grok3,Deepseek,Chatgpt,Kimi,Claude(持续更新)
  • 【图像的读写与基本操作】
  • vscode java环境中文乱码的问题
  • 【华三】从零开始掌握SR技术:原理、架构与应用全解析
  • kotlin的lateinit声明 的变量可能为null吗?
  • prometheus+node_exporter+grafana监控K8S信息
  • 阿里云ack的创建与实战应用案例