冒泡排序

基本思想:从后往前(或者从前往后)两两比较相邻元素的值,若为逆序,则交换他们,直到序列比较完。当一整趟下来都没有元素被移动,代表算法可以提前结束。好比于关键字小的元素逐渐往上漂浮直到冒出水面,关键字打的元素如石头一般下沉到水底。

void BubbleSort(ElemType A[], int n)
{for(int i=0; i<n-1; i++){flag = false;      //表示本趟冒泡是否发生交换的标志for(int j=n-1; j>i; j--){if(A[j-1] > A[j]){swap(A[j-1], A[j]);flag = true;}}if(flag == false)break;  }
}

空间效率:O(1)

时间效率:比较次数:n(n-1)/2;移动次数:3n(n-1)/2;时间复杂度O(n²)

稳定性:不会交换相同关键字的元素顺序

双向冒泡排序

荷兰国旗问题

设有一个仅有红、白、蓝三个颜色的条块组成的条块序列,要求时间复杂度为O(n),使得按照红、白、蓝的顺序排好,即组成荷兰国旗的图案

typedef enum {RED, WHITE, BLUE} color;void Flag_Arrange(color a[], int n)
{int i=0, j=0, k=n-1;while(j<=k){switch(a[j]){case RED:swap(a[i], a[j]);i++;j++;break;case WHITE:j++;break;case BLUE:swap(a[j], a[k]);k--;     //不进行j++是因为防止交换后a[j]仍是蓝色的情况break;}}
}

更好用的冒泡排序、双向冒泡排序,拓展荷兰国旗问题相关推荐

  1. 排序算法系列:冒泡排序与双向冒泡排序

    概述 排序算法应该算是一个比较热门的话题,在各个技术博客平台上也都有一些博文进行了一定程度的讲解.但还是希望能从自我完善的角度出发,可以更详细.全面.形象地表达这些算法的精髓.本文就先从最简单的冒泡排 ...

  2. 【算法-0】排序算法-双向冒泡排序(也称鸡尾酒排序、搅拌排序),附python代码+注释

    概述 从名字就可以看出来,是双向的冒泡排序. 冒泡排序,每次都是从左往右,交换相邻的元素,从而达到循环一边可以把最大的元素放在右边. 而双向冒泡排序,在完成一次从左往右的冒泡排序后,再从右往左进行冒泡 ...

  3. python代码实现鸡尾酒排序(双向冒泡排序)

    python代码实现鸡尾酒排序(双向冒泡排序) 鸡尾酒排序是冒泡排序的一种变形.它与冒泡排序的不同之处在于排序时是以双向在序列中进行排序. 鸡尾酒排序的原理跟冒泡排序差不多,只不过冒泡排序每一轮的比较 ...

  4. 4001.基于双向链表的双向冒泡排序法

    基于双向链表的双向冒泡排序法 发布时间: 2018年11月26日 10:09   时间限制: 1000ms   内存限制: 128M 习题集源码中出现了 temp->next->prior ...

  5. 4023-基于双向链表的双向冒泡排序法

    描述 有n个记录存储在带头结点的双向链表中,利用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法.(注:双向冒泡排序即相邻两趟排序向相反方向冒泡). 输入 多组数据,每组数据两行.第一行为序列 ...

  6. 【python】双向冒泡排序

    冒泡排序法: 冒泡排序存在所谓的"乌龟问题",假设我们需要将序列按照升序排序. 序列中的较小的数字又大量存在于序列的尾部,这样会让小数字在向前移动得很缓慢, 因此针对这一问题,产生 ...

  7. 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序

    下面代码是冒泡排序逐步优化,写代码用递归也可以实现.什么冒泡排序就不写了,百度解释很详细.对理论不是很感兴趣. #!/usr/bin/env python3 # -*- coding: utf-8 - ...

  8. java顺序表冒泡排序_冒泡排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...

    冒泡排序就这么简单 在我大一的时候自学c语言和数据结构,我当时就接触到了冒泡排序(当时使用的是C语言编写的).现在大三了,想要在暑假找到一份实习的工作,又要回顾一下数据结构与算法的知识点了. 排序对我 ...

  9. 冒泡排序、冒泡排序动画、冒泡排序代码、冒泡排序教程

    冒泡排序.冒泡排序动画.冒泡排序代码.冒泡排序教程 点击下载代码 推箱子代码 碰撞检测穿马路.小人过马路 魔幻粒子.火焰动画 开心消消乐 16宫格的翻牌消除游戏 我的世界小人行走代码 超级玛丽 赣极方 ...

  10. 各种排序算法以及扩展(选择排序,冒泡排序,插入排序,归并排序,最小和问题,堆排序,荷兰国旗问题,快速排序)

    文章目录 基础算法一二课 选择排序 冒泡排序 插入排序 判断数据是否在数组中 找满足>=value的最左位置 ^ 异或符号的多用 一.进行交换 二.数组中有一种数出现了奇数次,其他数都出现了偶数 ...

最新文章

  1. Linux Socket基础介绍
  2. Linux 并发服务器雏形总结
  3. Python 内嵌函数运用(探究模块)
  4. JanusGraph(HugeGraph通用): 可视化 GraphEXP 插件安装
  5. hexo评论_hexo修改主题
  6. 2020年,程序员要做好苦日子的准备了!
  7. 每天Leetcode 刷题 初级算法篇-打乱数组
  8. 基于vitamio的网络电视直播源代码
  9. 虚拟机连接锐捷校园网
  10. 微信小程序实现秒杀、拼团、团购等效果
  11. GPS经纬度转84坐标系
  12. ffmpeg编解码命令(包含YUV编码到常见视频格式文件)
  13. 使用excel校验身份证号码是否正确
  14. 优知学院创始人陈睿:怎样做好一个创业公司CTO?
  15. 数据采集与埋点简介之 代码埋点、可视化埋点与无痕埋点
  16. 逻辑函数表达式转化为标准形式
  17. photoshop旋转图片
  18. R7 7735HS参数 锐龙77735HS怎么样相当于什么水平级别
  19. 最小二乘法计算一组数据的斜率(线性回归、趋势计算)
  20. Oracle数据库中processes参数设置

热门文章

  1. xboxone硬盘坏的表现_详解硬盘常见的故障及解决方法
  2. 网站为什么要备案?网站备案流程是什么?
  3. 百度服务器状态异常,百度抓取异常连接超时是什么意思
  4. 超级详细的H3C模拟器HCL的交换机Telnet服务配置过程(图文)
  5. 理解直播及其工作原理
  6. 计算机日期的格式怎么写,在excel表格中怎么把日期格式改成文本格式(excle表格中改变日期格式)...
  7. 项目管理计划Office Project 2013 日常使用
  8. pytorch模型转mxnet
  9. 分享微云普通用户不限速下载方法
  10. 跨境贸易EDM邮件使用指南