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

冒泡排序(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,那么本次循环没有进行交换,也就是数组已经排好序,直接退出大循环,否则继续进行循环。

http://www.lryc.cn/news/310406.html

相关文章:

  • STC-ISP原厂代码研究之 V3.7d汇编版本
  • 【word】引用文献如何标注右上角
  • MySQL 5.5、5.6、5.7的主从复制改进
  • 性能分析排查思路之日志(1)
  • Vue中如何实现条件渲染?
  • Postman上传文件的操作方法
  • linux系统Jenkins工具介绍
  • 【python】遵守 robots.txt 规则的数据爬虫程序
  • 使用爬虫去获取四六级成绩
  • 洛谷P1256 显示图像
  • 模拟器抓HTTP/S的包时如何绕过单向证书校验(XP框架)
  • 【JS 算法题: 将 json 转换为字符串】
  • 数的范围 刷题笔记
  • XSS简介及xsslabs第一关
  • 构建安全的REST API:OAuth2和JWT实践
  • 从0开始学习NEON(1)
  • (二十三)Flask之高频面试点
  • 设计模式(十三)抽象工厂模式
  • HTTP Cookie 你了解多少?
  • 【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】
  • ar时间序列
  • Android 14 AAOS audio
  • 文心一言 VS 讯飞星火 VS chatgpt (207)-- 算法导论15.4 4题
  • 【论文笔记】Attention Is All You Need
  • (亲测可用)Adobe Photoshop 2024下载与安装
  • uniapp聊天记录本地存储(详细易懂)
  • Vue.js中的$nextTick
  • python+mysql咖啡店推荐系统django+vue
  • 综合实验nginx+nfs+kpa
  • springboot197基于springboot的毕业设计系统的开发