王立柱《c语言》3.5.5
向下起泡排序
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相关推荐
- c语言程序设计王立柱pdf,C语言程序设计 教学课件 朱立华 王立柱 C语言程序设计课件第5章090909.pdf...
C语言程序设计 1 2015-6-8 第五章 一级指针与一维数组 主讲: 计算机学院 朱立华 2 2015-6-8 内容提要 内容提要 直接引用与间接引用的不同方式及实质 指针是地址的类型,是对地 ...
- c语言程序设计王立柱pdf,C语言程序设计 教学课件 朱立华 王立柱 C语言程序设计课件第4章090909.pdf...
C语言程序设计 1 2015-6-8 第四章 程序流程控制 主讲: 计算机学院 朱立华 2 2015-6-8 内容提要 内容提要 算法的基本概念以及表示方法,简单介绍流程图 C程序的3种基本流程控 ...
- 王立柱《c语言》3.5.4
向上起泡排序 1.总共要比较n-1次,每次比较j=n-i次,j从尾元素起,左半区为有序子集,起始为空,右半区为无序子集,函数头BubbleUp(int p,int n) 2.冒泡排序(Bubble S ...
- 王立柱《C语言程序设计》3.5.3
利用IndexOfMin(),编写选择排序函数 #include<stdio.h> int Selection(int *p,int n); int IndexOfMin(int *p,i ...
- 王陆C语言,王陆和王舞的关系
开始两人是师徒,但后来关系是恋人.一开始王舞坚持大师兄会回来,所以并没有觉得自己会喜欢上别人.但在和王陆的日渐相处中,两人之间感情逐渐升温,最后虽然大师兄短暂的回来了,但还是消散了,而王舞也知道了王陆 ...
- java语言编程基础王晓华_Java语言基础编程练习
Java语言基础编程练习 1. 运算符练习 提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒. 如:输入7199,输出1小时59分59秒 System.out.println("请 ...
- 组态王的c语言语法,组态王常用的函数()
此函数为报表专用函数.查询历史数据,系统会自动弹出历史数据查询对话框.语法使用格式如下: ReportSetHistData2(StartRow,StartCol); 参数说明: StartRow:查 ...
- 湖北工业大学数据结构用头文件、数据结构与算法王立柱2013
书中对Vector.List.Queue.Stack.Heap.Graph等进行了实现,全书代码在vc6中理论上运行通过,但是到了现代c++,使用vc6进行学习与写代码是比较麻烦的,基于提供的代码,仅 ...
- 王朔《我的千岁寒》:可以看却无法看到
你可以说<我的千岁寒>是梦呓,甚至是妄语狂言,但你不能说看不懂,你可以不懂它的修辞,但你应该听到它的声音.正如歌曲中的"RAP",它是歌唱者自我的沉溺和宣泄,听者只能反 ...
最新文章
- Java数据结构和算法:哈希表
- android kernel控制台初始化过程
- 微服务扩展新途径:Messaging
- 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
- csv逗号分隔符转换_机器学习Python实践——数据导入(CSV)
- iOS获取iPhone系统等信息和服务器返回空的异常处理
- 谷歌浏览器自带的翻译插件为什么不能用?
- 公众号获取token失败_如何利用公众号获取电影引流?如何利用电影网站嫁接公众号?...
- spring boot 上传视频demo
- 批处理文件——多个QQ一键登录
- python(十二)Uiautomator2搭建UI自动化框架实战
- 洛谷P3397 地毯
- Towhee 每日模型周报
- 管道程序c语言,怎么创建管道
- Windows XP Professional SP3安装版
- 非常不错的点餐系统应用源码完整版
- Visual studio 2010 ComboBox控件与有道桌面词典冲突问题
- 计算机专业英语自我介绍带注释,【英文演讲】IntroduceMyself自我介绍
- nmap全开扫描,半开扫描_nmap扫描的阶段
- 时间格式化方法,输出格式:2019-06-20 11:30:50