【转】C++学习四 冒泡排序法的一些改进
冒泡排序法需要两次扫描,所以从时间复杂度来说,是O(n2).
如果用图形表示,是这样的:
但是我们可以加以改进。
首先是,如果在排序中间,整个向量已经达到了有序状态,可以直接跳出来。
这样它的复杂度由一个三角形变为一个梯形。
同时,可能存在部分有序的状态,所以可以再次改进:
深蓝色为可能占用的时间复杂度。
我自己写了一个代码测试了一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
遇到问题:
1、使用swap()的时候,格式是:
#include <algorithm>
using namespace std;
swap(a,b);
2、使用模板函数的时候,每一个模板函数都需要声明template <typename T> , 格式如下:
template <typename T>
T Mysort(T a) //与一般函数用法相同
{return 2*a;
}
3、出错解析:
这四行加起来是一个错误,编译器只不过在提示。
比如第一句是:在bubble函数的使用中
第二行解释其中是因为Mysort需要使用这个函数
第三行如果我们点击,提示出现在主函数中,是Mysort的使用的地方
第四行是真正的错误,也就是swap函数没有定义
4、运行结果:
上述算法就是sort()排序方法的一种实现原理
参考书籍:
1---《数据结构(C++语言版)》邓俊辉
【转】C++学习四 冒泡排序法的一些改进相关推荐
- 排序1+1:冒泡排序法(BubbleSort)的改进以及效率比较
1 我要冒泡 冒泡排序这个名字对于我们来说实在是过于熟悉了.作为一个程序员,如果敢说出自己不会冒泡排序,结局肯定是会被鄙视到火星上去.许多公司到学校去招聘应届毕业生的时候,都会要求写一个冒泡排序.毫无 ...
- 冒泡排序python例题_零基础学python 15 经典算法:冒泡排序法(课后习题答案)...
这节课我们对于冒泡排序法的课后习题进行一下解答: 回顾一下我们的题目: 上节课我们学习的冒泡排序法,是让我们的list从小到大进行排列,这次我们的任务是,请对冒泡排序法进行一定的修改,加一个参数,让它 ...
- 【C语言程序】某班级学习委员整理获得奖学金排名,总成绩=智育成绩*60%+德育成绩*30%+体育成绩*10%,使用冒泡排序法将班级前12名同学的成绩进行排名。
某班级学习委员整理获得奖学金排名,总成绩=智育成绩*60%+德育成绩*30%+体育成绩*10%,使用冒泡排序法将班级前12名同学的成绩进行排名. 题出自------------------------ ...
- c语言冒泡排序项目总结,C语言冒泡排序法心得
记得以前在大学里学习c语言的时候,刚开始是很吃力的. 入门级别的算法中有个叫冒泡排序法,也有称为气泡排序法.那时候刚接触它就对它的名字特别感兴趣,因为觉得很有意思.好了,废话不多说了,我们先一起简单回 ...
- 冒泡排序法c语言实验报告,微机原理实验报告-冒泡排序
<微机原理实验报告-冒泡排序>由会员分享,可在线阅读,更多相关<微机原理实验报告-冒泡排序(12页珍藏版)>请在人人文库网上搜索. 1.一.实验目的(1)学习汇编语言循环结构语 ...
- C语言十个字母用冒泡法排序,冒泡排序法(C语言) - osc_wq8j2a9a的个人空间 - OSCHINA - 中文开源技术交流社区...
常用的排序方法有冒泡排序法,选择排序法,插入排序法以及希尔排序法等.本文着重讲解如何利用C代码,实现冒泡排序. 首先,要了解什么是冒泡排序.冒泡排序是常用的一种排序方法,其基本方法就是逐次比较.即一次 ...
- 探索初级算法学习笔记-快速排序法
快速排序法学习笔记 #include<stdio.h>void swap(int *a,int *b) {int t;t=*a;*a=*b;*b=t; }void quickSort(in ...
- C——用冒泡排序法、选择排序法对随机输入的10个整数从小到大排序
//冒泡排序法 #include <stdio.h> int main() {int i,j,t,a[10];for(i=0;i<10;i++){scanf("%d&quo ...
- 生活中c语言排序案例,C语言之数字排序-基于冒泡排序法的一些案例(对未知数量的数字进行排序)...
C语言之数字排序 在学习C语言的时候遇到了几个比较基础的排序问题,又结合了之前的处理方法.觉得在这个需要再系统地进行复习一下. 当我们在初学C语言的时候,我们都会结合三个数字的排序来理解计算机处理问题 ...
最新文章
- 数据库里存json数据
- web 监听器 过滤器等组件
- Spring 和 SpringBoot 最核心的 3 大区别,详解!
- 代码开源!激光雷达 SLAM 的闭环检测:OverlapNet
- 学习jquery选项卡插件
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
- 在VS中编译C++静态库以及使用的方法
- SAP CRM BP contact detail - workAddress
- android 面试题(一)
- 【光说不练假把式】今天说一说Kubernetes 在有赞的实践
- AD Framework 单点登录
- 程序员最想要十八般武艺俱全的“保姆型”项目经理!
- JVM 类加载机制详解
- python赋值运算符_解释一下python中的赋值运算符
- 笔记本计算机风扇连线,机箱风扇接口怎么接电源线【图文】
- EXCEL-解决表格被锁定和分组的冲突
- Codeforces633H-Fibonacci-ish II
- Python处理二进制流(一)
- 删除快照出现提示框:删除时出错 字典问题
- 复盘百度移动化,下一步去哪儿?
热门文章
- svn 版本升级的问题
- [SimplePlayer] 2. 在屏幕上显示视频图像
- Linux服务部署之NTP时间服务器
- LOJ#6002. 「网络流 24 题」最小路径覆盖
- struts2值栈,OGNL表达式,interceptor
- grafana授权公司内部邮箱登录 ldap配置
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
- [剑指offer][JAVA]面试题第[09]题[用两个栈实现队列][LinkedList]
- 51nod 1101 换零钱 简单dp
- ionic android 本地存储,ionic2/3本地数据存储storage