冒泡排序(普通,加强对比)
1.普通的冒泡排序
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include<time.h> 4 using namespace std; 5 #define MAX 20 6 //打印数组 7 void printFunc(int* arr, int len) 8 { 9 for (int i = 0; i < len; i++) 10 cout << arr[i] << " "; 11 cout << endl; 12 } 13 //排序 14 void Popsort(int* arr, int len) 15 { 16 //从小到大 17 for (int i = 0; i < len-1; i++) //要点1. 18 { 19 for (int j = 0; j < len - i - 1; j++) //要点2. 20 { 21 if (arr[j] > arr[j + 1]) //要点3. 22 { 23 int temp = arr[j]; 24 arr[j] = arr[j+1]; 25 arr[j + 1] = temp; 26 } 27 } 28 } 29 30 } 31 //创建数组 32 void test03() 33 { 34 int arr[MAX]; 35 srand((unsigned int)time(NULL)); 36 for (int i = 0; i < MAX; i++) 37 { 38 arr[i] = rand() % MAX; 39 } 40 printFunc(arr, MAX); 41 //排序 42 Popsort(arr, MAX); 43 printFunc(arr, MAX); 44 45 } 46 47 48 int main03() 49 { 50 51 test03(); 52 53 system("pause"); 54 return EXIT_SUCCESS; 55 }
2.加强版冒泡排序
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include<time.h> 4 using namespace std; 5 #define MAX 20 6 //打印数组 7 void printFunc04(int* arr, int len) 8 { 9 for (int i = 0; i < len; i++) 10 cout << arr[i] << " "; 11 cout << endl; 12 } 13 //排序 14 void Popsort04(int* arr, int len) 15 { 16 bool flag = true; // 要点1. 17 for (int i = 0; i < len - 1 && flag; i++) 18 { 19 flag = false; // 要点2. 20 for (int j = 0; j < len - 1 - i; j++) 21 { 22 if (arr[j] > arr[j + 1]) //要点3. 23 { 24 flag = true; 25 int temp = arr[j]; 26 arr[j] = arr[j + 1]; 27 arr[j + 1] = temp; 28 } 29 } 30 } 31 cout << "新冒泡" << endl; 32 } 33 34 35 //创建数组 36 void test04() 37 { 38 int arr[MAX]; 39 srand((unsigned int)time(NULL)); 40 for (int i = 0; i < MAX; i++) 41 { 42 arr[i] = rand() % MAX; 43 } 44 printFunc04(arr, MAX); 45 //排序 46 Popsort04(arr, MAX); 47 printFunc04(arr, MAX); 48 49 } 50 int main() 51 { 52 53 test04(); 54 55 system("pause"); 56 return EXIT_SUCCESS; 57 }
//这两种方法的不同之处在于:(进行排序的次数会不同)
1.普通冒泡: 即使数据是有序的,或排序过程中(还没有进行完,已经有序),但是剩下的排序步骤它还会进行,浪费时间。
2.加强版冒泡:增加了一个标示量(flag);一旦当数组有序后,标示量就变为 false,不会在进行下面的循环,节省了循环次数。
加强版:详细理解(参照上面代码:)
1)标示量 flag 初始值为 true, 他会进入外层循环,然后就给他赋值为 false;
2)当在内层循环时,如果此时数据有序,就不会进入 if()判断语句;标示量就不会发生变化, 还为false, 下一次外层循环就不会进入,减少了循环次数
3)如果此时数据无序, 在内层循环时, 会进入if()判断语句,标示量 发生变化,为 true, 下一次外层循环还会进入, 直至 false为 true 或者 全部循环完毕(此时false肯定也为true了, 因为已经排序完, 数据一定有序了)。
3.冒泡循环的特点:
1.)每次内层循环完毕,都会把数据中(最大或最小)的元素放到指定的位置
2.)如第一次内层循环完毕,数据中(最大或最小) 的元素肯定实在数据的开头或结尾(一般是开头,因为大部分人都是从开头进行循环的)。
转载于:https://www.cnblogs.com/yyx1-1/p/5774676.html
冒泡排序(普通,加强对比)相关推荐
- 快速排序与冒泡排序的效率对比
快速排序与冒泡排序的效率对比 鄙人在这里谈一下自己对冒泡排序与快速排序的看法,在经过详细的浏览代码以及文章后,我们可以得出以下结论: 1 快速排序是冒泡排序的一种改进,跟冒泡排序有一定的区别. 2. ...
- java冒泡排序_Java冒泡排序,鸡尾酒排序
人生最大的悲哀就是轻信了别人,否认了自己. 冒泡排序 冒泡排序就是不断对比当前数组下标的值和下一个下标得值,当前下标的值如果大于下一个下标的值,两个值互换. int 鸡尾酒排序 冒泡排序的进阶版,在一 ...
- 算法给小码农冒泡排序铭纹,快速排序四极
文章目录 排序 常见的排序算法 常见排序算法的实现 冒泡排序 ==也是我们本身接触最早的排序 很简单的一个排序== 完整冒泡排序代码 快速排序(无敌的排序) 将区间按照基准值划分为左右两半部分的常见方 ...
- Python vs PHP 冒泡排序和累加求和计算性能测试
为什么80%的码农都做不了架构师?>>> 测试环境: 处理器i5-3230M,64位Ubuntu 14.04 Python 2.7.6, PHP 5.4.39, PHP 7.0 ...
- C++基础-介绍·数据结构·排序·算法
C++基础-介绍·数据结构·排序·算法 特点 使用方向 RPC Data Struct 数据结构 栈 Stack 内存分配中的栈 队列 List 数组 Array 链表 LinkTable 树 Tre ...
- flash AS3 Loader加载外部文件类 及队列加载方法
从2011年开始使用这段代码为了应对各种加载修修改改了这么多年,很基础的功能,没啥特别的,重点在于加载子swf获取它的类,还有就是卸载子swf时要清理内存,否则内存占用会节节窜高,内存溢出,所以加载新 ...
- 广州某某某某科技前端开发面试
面试时间: 2020年12月10日下午7点-8.30点 面试形式: 技术一面+技术二面 技术一面 自我介绍 参考模板: 你好,我是XX,毕业于XX大学.现就职于XX公司,有X年开发经验,公司主要使用技 ...
- 基于SIMD和缓存友好的结构体数组排序算法(论文阅读笔记)
摘要 本文描述了一个通过高效利用SIMD指令和当今处理器缓存内存的,用于对一个数据结构进行排序的新算法.当前,通过SIMD指令实现的多路归并排序已经被作为一个对于int值排序的高效内存排序算法使用了. ...
- 八大排序的思想讲解与排序算法可视化
可视化的动图可以帮助我们理解排序算法,在了解了排序算法的思想后,观察动图可以加深我们对排序算法的理解. 本文全部代码已上传Gitee. 文章目录 一.插入排序 1.直接插入排序 2.希尔排序 ...
- 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序
1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...
最新文章
- 字符串按长度转换成数组
- SPOJ - OPTM Optimal Marks(进制拆分+最小割)
- Fiori 花瓣动画效果的实现原理
- cron 每年执行一次_crontab服务执行定时脚本,在指定时间内让php执行处理业务逻辑...
- [转]使用debugger调试JavaScript脚本
- 粽子SHOP-粽子商城官网-一款简洁大气的官网源码
- SimpleDet: 一套简单通用的目标检测与物体识别框架
- c语言三种循环语句,C语言三种循环语句的功能等价性
- 随便一个人就能干预大选?
- Java实体类与数据库表映射关系
- 虚拟主机需要备案吗?
- OutMan——Objective-C中分类、延展、非正式协议和协议
- WindowsLiveWriter安装步骤
- GIS空间分析(四)—— 空间分布类型
- 数据分析之大数据分析
- 如何在各种非三星电脑上安装Samsung Notes三星笔记
- 微信小程序项目实例小程序记事本+后台
- 客户端专项测试-启动时间测试
- Newcomer先生的blog中文版的志愿者翻译已经招募
- 美国的米拉超级计算机,超级计算机“米拉”:效力阿贡国家实验室_Intel Xeon E5-4650_服务器评测与技术-中关村在线...
热门文章
- javascript 异步队列
- 转换FlashFxp站点和FtpRush站点的好工具
- ラブ・ストーリーは突然に(突然發生的愛情故事)歌詞
- vue组件,通过props父组件给子组件传值,WTF, 子组件报错undefined???
- JAXB--@XmlElementWrapper注解(二)
- Hive里的分区、分桶、视图和索引再谈
- mysql Packet for query is too large (1185 1024)异常
- 第一次写oracle SQL 两个表链接查询
- Qt QString to char*
- Visual C#.Net 网络程序开发-Socket篇