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. 快速排序与冒泡排序的效率对比

    快速排序与冒泡排序的效率对比 鄙人在这里谈一下自己对冒泡排序与快速排序的看法,在经过详细的浏览代码以及文章后,我们可以得出以下结论: 1 快速排序是冒泡排序的一种改进,跟冒泡排序有一定的区别. 2. ...

  2. java冒泡排序_Java冒泡排序,鸡尾酒排序

    人生最大的悲哀就是轻信了别人,否认了自己. 冒泡排序 冒泡排序就是不断对比当前数组下标的值和下一个下标得值,当前下标的值如果大于下一个下标的值,两个值互换. int 鸡尾酒排序 冒泡排序的进阶版,在一 ...

  3. 算法给小码农冒泡排序铭纹,快速排序四极

    文章目录 排序 常见的排序算法 常见排序算法的实现 冒泡排序 ==也是我们本身接触最早的排序 很简单的一个排序== 完整冒泡排序代码 快速排序(无敌的排序) 将区间按照基准值划分为左右两半部分的常见方 ...

  4. Python vs PHP 冒泡排序和累加求和计算性能测试

    为什么80%的码农都做不了架构师?>>>    测试环境: 处理器i5-3230M,64位Ubuntu 14.04 Python 2.7.6, PHP 5.4.39, PHP 7.0 ...

  5. C++基础-介绍·数据结构·排序·算法

    C++基础-介绍·数据结构·排序·算法 特点 使用方向 RPC Data Struct 数据结构 栈 Stack 内存分配中的栈 队列 List 数组 Array 链表 LinkTable 树 Tre ...

  6. flash AS3 Loader加载外部文件类 及队列加载方法

    从2011年开始使用这段代码为了应对各种加载修修改改了这么多年,很基础的功能,没啥特别的,重点在于加载子swf获取它的类,还有就是卸载子swf时要清理内存,否则内存占用会节节窜高,内存溢出,所以加载新 ...

  7. 广州某某某某科技前端开发面试

    面试时间: 2020年12月10日下午7点-8.30点 面试形式: 技术一面+技术二面 技术一面 自我介绍 参考模板: 你好,我是XX,毕业于XX大学.现就职于XX公司,有X年开发经验,公司主要使用技 ...

  8. 基于SIMD和缓存友好的结构体数组排序算法(论文阅读笔记)

    摘要 本文描述了一个通过高效利用SIMD指令和当今处理器缓存内存的,用于对一个数据结构进行排序的新算法.当前,通过SIMD指令实现的多路归并排序已经被作为一个对于int值排序的高效内存排序算法使用了. ...

  9. 八大排序的思想讲解与排序算法可视化

      可视化的动图可以帮助我们理解排序算法,在了解了排序算法的思想后,观察动图可以加深我们对排序算法的理解.   本文全部代码已上传Gitee. 文章目录 一.插入排序 1.直接插入排序 2.希尔排序 ...

  10. 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序

    1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...

最新文章

  1. 字符串按长度转换成数组
  2. SPOJ - OPTM Optimal Marks(进制拆分+最小割)
  3. Fiori 花瓣动画效果的实现原理
  4. cron 每年执行一次_crontab服务执行定时脚本,在指定时间内让php执行处理业务逻辑...
  5. [转]使用debugger调试JavaScript脚本
  6. 粽子SHOP-粽子商城官网-一款简洁大气的官网源码
  7. SimpleDet: 一套简单通用的目标检测与物体识别框架
  8. c语言三种循环语句,C语言三种循环语句的功能等价性
  9. 随便一个人就能干预大选?
  10. Java实体类与数据库表映射关系
  11. 虚拟主机需要备案吗?
  12. OutMan——Objective-C中分类、延展、非正式协议和协议
  13. WindowsLiveWriter安装步骤
  14. GIS空间分析(四)—— 空间分布类型
  15. 数据分析之大数据分析
  16. 如何在各种非三星电脑上安装Samsung Notes三星笔记
  17. 微信小程序项目实例小程序记事本+后台
  18. 客户端专项测试-启动时间测试
  19. Newcomer先生的blog中文版的志愿者翻译已经招募
  20. 美国的米拉超级计算机,超级计算机“米拉”:效力阿贡国家实验室_Intel Xeon E5-4650_服务器评测与技术-中关村在线...

热门文章

  1. javascript 异步队列
  2. 转换FlashFxp站点和FtpRush站点的好工具
  3. ラブ・ストーリーは突然に(突然發生的愛情故事)歌詞
  4. vue组件,通过props父组件给子组件传值,WTF, 子组件报错undefined???
  5. JAXB--@XmlElementWrapper注解(二)
  6. Hive里的分区、分桶、视图和索引再谈
  7. mysql Packet for query is too large (1185 1024)异常
  8. 第一次写oracle SQL 两个表链接查询
  9. Qt QString to char*
  10. Visual C#.Net 网络程序开发-Socket篇