上一篇:辞旧迎新 WinFS未来的文件存储系统 >>
Visual C++下对冒泡排序算法的改进
| 天极软件专题专区精选 到天极软件“读编交流区”畅所欲言 | |||
| Google专区 | POPO专区 | QQ专区 QQ挂机 | 了解Web2.0 |
| Flash MX 视频教程 | Photoshop视频教程 | 网页设计视频教程 | 照片处理数字暗房 |
| PPT动画演示教程 | Excel动画教程集 | Word动画演示教程 | Windows Vista专区 |
| 特洛伊木马专区 | 黑客知识教程专区 | 防火墙应用专区 | 注册表应用专区 |
| Windows API开发专区 | 网络编程专区 | VB数据库编程专区 | 图像处理与多媒体编程 |
摘 要:本文对排序中最常见的起泡法进行分析,发现在实现单向起泡的同时可以实现双向起泡,从而实现了冒泡算法的改进,提高了运算速度。
关键字:程序设计、起泡、双向起泡、VC++
排序是在程序设计中常碰到的问题,排序算法也有很多种。起泡法是众所周知的排序算法,其原理是每次将相邻两个数进行比较,较大的下沉。其的主程序段如下(用VC++实现):
| Void Bubble Sort (int* pData,int Count) { Int iTemp; for(int i=1;i<Count;i++) { For (int j=Count-1;j>=i;j--) { if(pData[j]<pData[j-1]) { iTemp = pData[j-1]; pData[j-1] = pData[j]; pData[j] = iTemp; } } } } |
我们分析上述程序段可以发现起泡法是从一端开始比较的,第一次循环就是把最小数上升到第一位置,第二次循环就是把第二最小数上升到第二位置。如此循环实现数据的排序。那么我们是否可以找到最小数的同时找到最大数呢?当然可以。方法是在一端起泡时同时在另一端也进行起泡。即反向起泡。下面的程序段实现的是双向起泡:
| void Bubble2Sort(int* pData,int Count) { int iTemp; int left = 1; int right =Count -1; int t; do { //正向的部分 for(int i=right;i>=left;i--) { if(pData[i]<pData[i-1]) { iTemp = pData[i]; pData[i] = pData[i-1]; pData[i-1] = iTemp; t = i; } } left = t+1; //反向的部分 for(i=left;i<right+1;i++) { if(pData[i]<pData[i-1]) { iTemp = pData[i]; pData[i] = pData[i-1]; pData[i-1] = iTemp; t = i; } } right = t-1; }while(left<=right); } |
分析上面的程序段我们可以发现正向起泡时第一次循环找出了最小数,反向起泡第一次循环找到最大数。很显然在一次循环中即可以找到一个最小的数还可以找到一个最大的数,所以用双向冒泡排序的交换的次数减少了,从而达到了优化起泡法的作用。
下一篇:系统变变变 Windows六则桌面应用技巧 >>
相关文章:
- · 微软迎来迟到幸福 10天进账额相当于5年总和
- · IE7上市临近 微软Google口水战不断升级
- · 欧盟拟对微软展开第二轮反垄断调查
- · 微软透露新测试版本Word将支持博客功能
- · 数据挖掘开山鼻祖阿格拉瓦加盟微软
- · 微软抛上亿美元订单 软件测试人才成香饽饽
- · 微软瞄准消费安全软件市场 将冲击现有格局
- · 微软酝酿新搜索软件抗Google 夏天推测试版
- · 微软英特尔认为个人电脑时代没有结束
- · 发改委与微软签署软件产业合作谅解备忘录
- · 微软与信产部签协议 2.5亿投资农村信息化
- · Sun发布Beta 2测试版Java SE 6
- · .NET2.0中一种简单的窗口控件状态控制法
- · ASP.NET开发购物推车之购物车类
- · ASP.NET中的三种表格化数据方法
- · ASP.NET入门随想之多态、接口与委托
- · ASP.NET入门随想之明明白白我的心
- · COM组件设计与应用之编译、注册、调用
- · COM 组件设计与应用之数据类型
- · COM组件设计与应用之.NET中用ATL写组件
- · MATCOM在VC++与MATLAB混合编程中的应用
- · COM组件设计与应用之实现多接口
- · 美军为防黑客入侵禁用商业电子邮箱
- · Oracle中使用PL/SQL操作COM对象
- · 驯服Tiger之访问环境变量和调用子进程
- · VC++初学者经典错误LNK2001详解
- · ODBC中的FX/Bulk RFX数据交换机制分析
- · Visual C++中DDB与DIB位图编程全攻略
- · 泛型与模板的有机结合 STL.NET简介
- · 用VC实现特定编辑框上对回车键响应
- · 用Visual C# 实现四则混合运算
- · C#中利用mediaplayer打造mp3播放器
- · C#开发的两个原则的深入讨论
- · Visual C#构建网络计算机树形图
- · C# 3.0 新特性:扩展方法初探
- · Visual Studio2005改变软件教育模式
- · Visual C#中编写多线程程序之起步
- · Visual C#实现文件分割合并器
