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

C语言--详解--冒泡排序(Bubble Sort)

冒泡排序

冒泡排序核心思想:两两相邻的元素进行比较,如有需要(升序or降序),则要交换。

冒泡排序步骤

写出一个函数,实现数组从小到大的排序。

我们小的模块分析(分析我们需要哪些操作):
1,数组中的两个元素交换。
2,冒泡一次,即排序一次。
3,冒泡总数,即排序总数。
4,优化程序,即什么时候能减少的排序次数~~(每次排序都会消耗一定的资源)~~

两个元素交换

这是冒泡排序中,最简单的步骤:
形参:肯定要传递两个要交换的元素的指针

//完成交换
void Swap(int* x,int*y)
{int z = 0;z = *x;*x = *y;*y = z;
}

在函数中,完成数组的两个元素的交换。用指针传递数组地址来完成。

冒泡一次~~(排序一次)~~

冒泡排序中,一次冒泡排序,就是两两相邻的元素进行比较,如有需要(升序or降序),则要交换。(思想核心)

怎么判断需要交换?在升序(小到大)排序中,前者元素 > 后者元素 时,需要交换,否则不需要。

那么循环几次呢?因为两两比较,所有 len 长度 的数组最多也只能比较 len - 1 次

形参:传递数组的地址 以及 长度

即:

//冒泡一次      (排序一次)
void Sort(int arr[],int len)
{for (int i = 0;i < len-1;i++){if (arr[i] > arr[i + 1]){Swap(&arr[i], &arr[i + 1]);}}
}

3,冒泡总数~~(排序总数)~~

现在要确定冒泡的总数
跟上一小节类似,在长度为 len 的数组中,最少也需要排序len-1次,
形参:传递数组的地址 以及 长度

//冒泡次数       (排序次数)
void Sort(int arr[],int len)
{//循环len - 1 次for (int i = 0;i < len-1;i++){Sort(arr, len);}
}

4,优化程序,即什么时候能减少的排序次数

在一次冒泡排序中,能够确定的唯一一个数就是最后一个数,而且最后一个数是100%的在整个数组中的最大的数。所有每次排序前,可以把数组中的最后一个数给去掉。这样,每多一次冒泡次数,就能减少一次单个比较。

在冒泡一次中,如果没有发生数据交换,即每一个 前元素 < 后元素 ,就代表冒泡排序已完成,没有必要跑剩下的排序。。。

总上所优化的内容。最终代码为:

#include <stdio.h>//完成交换
void Swap(int* x,int*y)
{int z = 0;z = *x;*x = *y;*y = z;
}//冒泡一次      (排序一次)
int Sort(int arr[],int len)
{int c = 0;for (int i = 0;i < len-1;i++){if (arr[i] > arr[i + 1]){Swap(&arr[i], &arr[i + 1]);c++;}}return c;
}//冒泡次数       (排序次数)
void Bublle_Sort(int arr[], int len)
{int If_Swqp = 0;//判断是否进行交换//len - 1 次循环就可以完成排序for (len;len - 1 > 0;len--){If_Swqp = Sort(arr, len);//每次传递 len - i 个,直到 len > 1 if (If_Swqp == 0){//判断是否进行过交换,如果没进行交换,排序完成break;}	}
}// o -> O
int main()
{int arr[] = { 98,85,74,74,50,65,43,31,24,12,10,9,8,7,5,6,2,1,0 };int len = sizeof(arr) / sizeof(arr[0]);Bublle_Sort(arr, len);//打印数组for (int i = 0;i < len;i++){printf("%d ", arr[i]);}return 0;
}
http://www.dtcms.com/a/610866.html

相关文章:

  • 网站图标icowordpress报表工具
  • 7-2 实验2-2(循环队列)
  • 怎么在境外做网站外贸网站建设哪里实惠
  • 4.29.3五种波形发生器8086波形发生器,锯齿波脉冲波正弦波三角波直流信号含调试视频➕18页5000字原创报告软件流程图proteus8.9近期原创的,
  • 安卓网站开发wordpress文章中图片并排
  • 别等设备坏了才维修,工业无线监测与预测性维护提前发现隐患,避免停产损失
  • 【C++进阶】智能指针
  • 推荐几个的网站WordPress百度MIP手机主题
  • MYSQL结构操作DDL指令2.表操作
  • 做网站尽在美橙互联合肥关键词排名提升
  • 将sqlite3的表转成excel表
  • 商城网站框架南京网站设计个人
  • 除了Joomla用什么做网站好wordpress中调整图片尺寸
  • 二手车做网站的目的姑苏营销型网站建设电话
  • 3. Qt深入 线程安全函数与可重入函数
  • 做打鱼网站犯法不商城系统的基本
  • 广州网站开发哪家公司好ui设计与网站建设
  • 硅基计划6.0 柒 JavaEE 浅谈JVMGC垃圾回收
  • Springboot集成OnlyOffice
  • 海口市做网站的公司郑州官方发布最新消息
  • VS2012能编译C语言吗 | 深入解析Visual Studio 2012对C语言的支持
  • 安顺网站开发网站建设兼职劳务协议书
  • LTE/NR上行控制信道PUCCH与UCI介绍
  • 有啥可以自己做网站的软件视频网站程序
  • 开源项目分享 : Gitee热榜项目 2025-11-14 日榜
  • 科技助老与智慧养老的国家级政策与地方实践探索
  • 在婚恋网站上做红娘怎么样wordpress淘宝客pid
  • 手机网站被自动跳转阳江赶集网
  • 芋道vue3 内网无法显示icon问题解决
  • 国内金融机构数据分类分级建设方案——实践路径、落地要点与平台选型建议