向下起泡排序

1.冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

2.原理:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

3.算法分析:

时间复杂度:

若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数 均达到最小值;
所以,冒泡排序最好的时间复杂度为 O(n)
若初始文件是反序的,需要进行 趟排序。每趟排序要进行 次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值;
冒泡排序的最坏时间复杂度为 O(n^2)
综上,因此冒泡排序总的平均时间复杂度为O(n^2) 。

4.算法稳定性:

算法稳定性

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

C语言代码:
#include<stdio.h>
void BubbleDown(int *p,int n);
void BubbleDown(int *p,int n)
{int temp;int i,j;for(i=0;i<n;i++){for(j=0;j<n-i;j++){if(p[j]>p[j+1]){temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}}for(i=0;i<n;i++){printf("%d ",p[i]);}
}
int main()
{int a[]={2,5,1,76,34,123,98};int n;n=sizeof(a)/sizeof(a[0]);BubbleDown(a,n);return 0;
}
```c
结果:

结果说明:

结果显示正确

王立柱《c语言》3.5.5相关推荐

  1. c语言程序设计王立柱pdf,C语言程序设计 教学课件 朱立华 王立柱 C语言程序设计课件第5章090909.pdf...

    C语言程序设计 1 2015-6-8 第五章 一级指针与一维数组 主讲: 计算机学院 朱立华 2 2015-6-8 内容提要 内容提要 直接引用与间接引用的不同方式及实质 指针是地址的类型,是对地 ...

  2. c语言程序设计王立柱pdf,C语言程序设计 教学课件 朱立华 王立柱 C语言程序设计课件第4章090909.pdf...

    C语言程序设计 1 2015-6-8 第四章 程序流程控制 主讲: 计算机学院 朱立华 2 2015-6-8 内容提要 内容提要 算法的基本概念以及表示方法,简单介绍流程图 C程序的3种基本流程控 ...

  3. 王立柱《c语言》3.5.4

    向上起泡排序 1.总共要比较n-1次,每次比较j=n-i次,j从尾元素起,左半区为有序子集,起始为空,右半区为无序子集,函数头BubbleUp(int p,int n) 2.冒泡排序(Bubble S ...

  4. 王立柱《C语言程序设计》3.5.3

    利用IndexOfMin(),编写选择排序函数 #include<stdio.h> int Selection(int *p,int n); int IndexOfMin(int *p,i ...

  5. 王陆C语言,王陆和王舞的关系

    开始两人是师徒,但后来关系是恋人.一开始王舞坚持大师兄会回来,所以并没有觉得自己会喜欢上别人.但在和王陆的日渐相处中,两人之间感情逐渐升温,最后虽然大师兄短暂的回来了,但还是消散了,而王舞也知道了王陆 ...

  6. java语言编程基础王晓华_Java语言基础编程练习

    Java语言基础编程练习 1. 运算符练习 提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒. 如:输入7199,输出1小时59分59秒 System.out.println("请 ...

  7. 组态王的c语言语法,组态王常用的函数()

    此函数为报表专用函数.查询历史数据,系统会自动弹出历史数据查询对话框.语法使用格式如下: ReportSetHistData2(StartRow,StartCol); 参数说明: StartRow:查 ...

  8. 湖北工业大学数据结构用头文件、数据结构与算法王立柱2013

    书中对Vector.List.Queue.Stack.Heap.Graph等进行了实现,全书代码在vc6中理论上运行通过,但是到了现代c++,使用vc6进行学习与写代码是比较麻烦的,基于提供的代码,仅 ...

  9. 王朔《我的千岁寒》:可以看却无法看到

    你可以说<我的千岁寒>是梦呓,甚至是妄语狂言,但你不能说看不懂,你可以不懂它的修辞,但你应该听到它的声音.正如歌曲中的"RAP",它是歌唱者自我的沉溺和宣泄,听者只能反 ...

最新文章

  1. Java数据结构和算法:哈希表
  2. android kernel控制台初始化过程
  3. 微服务扩展新途径:Messaging
  4. 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
  5. csv逗号分隔符转换_机器学习Python实践——数据导入(CSV)
  6. iOS获取iPhone系统等信息和服务器返回空的异常处理
  7. 谷歌浏览器自带的翻译插件为什么不能用?
  8. 公众号获取token失败_如何利用公众号获取电影引流?如何利用电影网站嫁接公众号?...
  9. spring boot 上传视频demo
  10. 批处理文件——多个QQ一键登录
  11. python(十二)Uiautomator2搭建UI自动化框架实战
  12. 洛谷P3397 地毯
  13. Towhee 每日模型周报
  14. 管道程序c语言,怎么创建管道
  15. Windows XP Professional SP3安装版
  16. 非常不错的点餐系统应用源码完整版
  17. Visual studio 2010 ComboBox控件与有道桌面词典冲突问题
  18. 计算机专业英语自我介绍带注释,【英文演讲】IntroduceMyself自我介绍
  19. nmap全开扫描,半开扫描_nmap扫描的阶段
  20. 时间格式化方法,输出格式:2019-06-20 11:30:50

热门文章

  1. 蓝牙也宽带 诺基亚3230蓝牙共享宽带教程(内网用户设置或网关无响应的解决)
  2. PyCharm学生认证以及切换账号
  3. AutoJs学习-实现自动刷快手极速版
  4. 通过SnmpWalk获取服务器状态信息
  5. 2020年节假日JSON,全年日期对应的上班日、周末、节假日
  6. Android APT不能自动生成文件
  7. 全面曝光POS机支付行业三大痛点,许多支付人为此献出劳动成果
  8. 安装visio viewer2013成功后仍无法使用
  9. Android app升级完成以后自动重启自身App
  10. GB/T28181平台服务器解决方案简介