数据结构学习(十五)——冒泡排序
来源:互联网 发布:电子风水罗盘软件 编辑:程序博客网 时间:2024/05/29 16:22
在前篇的选择排序中,n个数据最多进行n-1次交换,但每次交换前要进行大量比较操作来确定交换对象,比较次数远大于交换次数。而交换操作只是数据的读写,数据规模较小时,其工作量比比较工作量小。用增加交换的次数来减少比较次数有可能是合理的,所以冒泡排序的好处是以交换为主要手段。如果排序对象基本有序时,冒泡排序算法将具有较高的效率。这是因为冒泡排序中有个标志变量是用于提前终止排序的,也即排序可以半途终止。
下面的代码进行了冒泡排序的练习。
#include <stdio.h>#define MAXSIZE 50void Bubble_sort(int *s, int n);int main(void){int n, i;int s[MAXSIZE + 1];printf("冒泡排序练习\n");printf("输入排序数据个数:");scanf("%d", &n);getchar();printf("依次输入数据\n");for(i=1; i<=n; i++)scanf("%d", &s[i]); Bubble_sort(s, n);printf("排序后的数据为\n");for(i=1; i<=n; i++)printf("%d ", s[i]);printf("\n"); return 0;}void Bubble_sort(int *s, int n){int i, j, k;int flag = 0;//交换标志变量for(i=1; i<=n; i++){flag = 1;for(j=n; j>i; j--)//从后向前查找最小值{if(s[j] < s[j-1]){s[0] = s[j];s[j] = s[j-1];s[j-1] = s[0];flag = 0;}}if(flag)//已经有序,提前终止排序break;}}
冒泡排序算法的时间复杂度为O(n^2)。
其算法操作有两部分,一种是比较操作,一种是交换操作。冒泡排序可以进行静态排序,但效率不高。也可以动态排序,但工作量比插入算法大一些(交换次数多一些)。最适合半动态排序,即每生成若干数据排序一次。
该算法需要的资源也比较少,只需要一个备用单元和3个辅助变量。
- 数据结构学习(十五)——冒泡排序
- 数据结构学习8——冒泡排序
- 数据结构——冒泡排序
- 冒泡排序——数据结构
- 【数据结构】单链表—冒泡排序
- C++学习之数据结构及算法——冒泡排序
- 数据结构与算法学习——冒泡排序
- 数据结构【排序算法】——冒泡排序
- C#版数据结构——冒泡排序
- 数据结构——简单的冒泡排序
- 数据结构与算法——冒泡排序
- 数据结构跑路篇——冒泡排序
- 数据结构制冒泡排序算法—PHP
- 数据结构 — 冒泡排序以及其优化
- 数据结构与算法学习——选择排序【使用上篇的冒泡排序】
- 【数据结构】——排序算法——2.1、冒泡排序
- 复习数据结构:排序算法(二)——冒泡排序
- 数据结构例程——交换排序之冒泡排序
- WIFI连接建立过程
- 教你如何在AdMob上日进斗金(每月5W美金)
- redis-cluster的搭建
- 50个最受网友欢迎的HTML5资源下载列表
- C++ --> static_cast<> 和 reinterpret_cast<>
- 数据结构学习(十五)——冒泡排序
- 嵌入式Linux网址
- C#窗体位置与大小设置详解
- kernel\sound\soc\s3c24xx\Valar_wm89xx.c
- 说说Android桌面(Launcher应用)背后的故事(二)——应用程序的添加
- 编写程序时候出现了问题ClassCastException: interface javax.xml.soap.Text
- 趣味编程:C#扫雷代码
- Windows7 下载android源码
- Zookeeper源码之ZookeeperServer