冒泡排序(C语言详解)

**原理:**从左到右一次比较,如果左侧数字比右侧数字大(小),则两数交换,否则比较下一 组数字,每一次大循环比较可以将乱序的最右侧数字改为最大(最小),每一次小循环的比 较次数相对于前一次要减一


动态用例:

升序排序代码详解:

复制代码
void bubble_sort (int arr[],int sz)   //将数组和元素个数传过来
{
  for(int i=0;i<sz-1;i++)   //每次大循环可以确定乱序最后一个数字,最多需要sz-1次循环
  {
    int tmp=0;
      for(int j=0;j<sz-1-i;j++)//每次小循环,因为已经确定最后的i个元素,剩下需要比较的元素个数就为sz-i,而需要比较的次数就为sz-1-i
      {
        if(arr[j]>arr[j+1])//相邻两个数比较,如过前一个数比后一个数大就交换
       {
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
tmp=1;
       }
      }
if(tmp==0)
break;
  }
}

降序排序代码详解:

复制代码
void bubble_sort (int arr[],int sz)   //将数组和元素个数传过来
{
  for(int i=0;i<sz-1;i++)   //每次大循环可以确定乱序最后一个数字,最多需要sz-1次循环
  {
    int tmp=0;
      for(int j=0;j<sz-1-i;j++)//每次小循环,因为已经确定最后的i个元素,剩下需要比较的元素个数就为sz-i,而需要比较的次数就为sz-1-i
      {
        if(arr[j]<arr[j+1])//相邻两个数比较,如过前一个数比后一个数小就交换
       {
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
tmp=1;
       }
      }
if(tmp==0)
break;
  }
}

两者排序方式唯一的区别:

1.升序排序:如果前一个数比后一个数大,二者就交换,所以用>

2.降序排序:如果前一个数比后一个数大,二者就交换,所以用<

tmp的作用:

每一次大循环,我们都将tmp设置为0,在每一次小循环里面,如果两个数进行了交换,我们就将tmp改为1,出这次大循环判断一下tmp是否为0,如果为0,那么本次循环没有进行交换,也就是数组已经排好序,直接退出大循环,否则继续进行循环。

相关推荐
qq_452396232 分钟前
第九篇:《Dockerfile 指令精讲(二):WORKDIR、ENV、ARG、EXPOSE》
java·开发语言·docker
JAVA社区4 分钟前
Java高级全套教程(九)—— SpringCloud超详细实战详解
java·开发语言·后端·spring cloud·面试·职场和发展
wyjcxyyy6 分钟前
java反序列化-cc1链
java·c语言·开发语言
山上三树6 分钟前
Python 高频报错速查表(开发通用版)
开发语言·python
傻啦嘿哟10 分钟前
解决DNS污染:防止OpenClaw解析API域名到虚假地址
开发语言·php
MY_TEUCK11 分钟前
【MYTRUCK - AI 应用】MetaGPT 0.8.2 安装与排错完整实录(Python 3.10 + 虚拟环境)
开发语言·人工智能·python·ai
林森lsjs15 分钟前
【日耕一题】2. 面向对象 Java 基础:构造方法与 toString
java·开发语言
广_17 分钟前
用AI写一个Python实时硬件监控与日志可视化界面
开发语言·人工智能·python
过期动态19 分钟前
【LeetCode 热题 100】三数之和
java·数据结构·算法·leetcode·职场和发展·排序算法
AI算法沐枫22 分钟前
基于YOLO26深度学习的【果园荔枝检测与计数】系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
开发语言·人工智能·python·深度学习·qt·学习·机器学习