更好用的冒泡排序、双向冒泡排序,拓展荷兰国旗问题
冒泡排序
基本思想:从后往前(或者从前往后)两两比较相邻元素的值,若为逆序,则交换他们,直到序列比较完。当一整趟下来都没有元素被移动,代表算法可以提前结束。好比于关键字小的元素逐渐往上漂浮直到冒出水面,关键字打的元素如石头一般下沉到水底。
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;}}
}
更好用的冒泡排序、双向冒泡排序,拓展荷兰国旗问题相关推荐
- 排序算法系列:冒泡排序与双向冒泡排序
概述 排序算法应该算是一个比较热门的话题,在各个技术博客平台上也都有一些博文进行了一定程度的讲解.但还是希望能从自我完善的角度出发,可以更详细.全面.形象地表达这些算法的精髓.本文就先从最简单的冒泡排 ...
- 【算法-0】排序算法-双向冒泡排序(也称鸡尾酒排序、搅拌排序),附python代码+注释
概述 从名字就可以看出来,是双向的冒泡排序. 冒泡排序,每次都是从左往右,交换相邻的元素,从而达到循环一边可以把最大的元素放在右边. 而双向冒泡排序,在完成一次从左往右的冒泡排序后,再从右往左进行冒泡 ...
- python代码实现鸡尾酒排序(双向冒泡排序)
python代码实现鸡尾酒排序(双向冒泡排序) 鸡尾酒排序是冒泡排序的一种变形.它与冒泡排序的不同之处在于排序时是以双向在序列中进行排序. 鸡尾酒排序的原理跟冒泡排序差不多,只不过冒泡排序每一轮的比较 ...
- 4001.基于双向链表的双向冒泡排序法
基于双向链表的双向冒泡排序法 发布时间: 2018年11月26日 10:09 时间限制: 1000ms 内存限制: 128M 习题集源码中出现了 temp->next->prior ...
- 4023-基于双向链表的双向冒泡排序法
描述 有n个记录存储在带头结点的双向链表中,利用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法.(注:双向冒泡排序即相邻两趟排序向相反方向冒泡). 输入 多组数据,每组数据两行.第一行为序列 ...
- 【python】双向冒泡排序
冒泡排序法: 冒泡排序存在所谓的"乌龟问题",假设我们需要将序列按照升序排序. 序列中的较小的数字又大量存在于序列的尾部,这样会让小数字在向前移动得很缓慢, 因此针对这一问题,产生 ...
- 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序
下面代码是冒泡排序逐步优化,写代码用递归也可以实现.什么冒泡排序就不写了,百度解释很详细.对理论不是很感兴趣. #!/usr/bin/env python3 # -*- coding: utf-8 - ...
- java顺序表冒泡排序_冒泡排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...
冒泡排序就这么简单 在我大一的时候自学c语言和数据结构,我当时就接触到了冒泡排序(当时使用的是C语言编写的).现在大三了,想要在暑假找到一份实习的工作,又要回顾一下数据结构与算法的知识点了. 排序对我 ...
- 冒泡排序、冒泡排序动画、冒泡排序代码、冒泡排序教程
冒泡排序.冒泡排序动画.冒泡排序代码.冒泡排序教程 点击下载代码 推箱子代码 碰撞检测穿马路.小人过马路 魔幻粒子.火焰动画 开心消消乐 16宫格的翻牌消除游戏 我的世界小人行走代码 超级玛丽 赣极方 ...
- 各种排序算法以及扩展(选择排序,冒泡排序,插入排序,归并排序,最小和问题,堆排序,荷兰国旗问题,快速排序)
文章目录 基础算法一二课 选择排序 冒泡排序 插入排序 判断数据是否在数组中 找满足>=value的最左位置 ^ 异或符号的多用 一.进行交换 二.数组中有一种数出现了奇数次,其他数都出现了偶数 ...
最新文章
- Linux Socket基础介绍
- Linux 并发服务器雏形总结
- Python 内嵌函数运用(探究模块)
- JanusGraph(HugeGraph通用): 可视化 GraphEXP 插件安装
- hexo评论_hexo修改主题
- 2020年,程序员要做好苦日子的准备了!
- 每天Leetcode 刷题 初级算法篇-打乱数组
- 基于vitamio的网络电视直播源代码
- 虚拟机连接锐捷校园网
- 微信小程序实现秒杀、拼团、团购等效果
- GPS经纬度转84坐标系
- ffmpeg编解码命令(包含YUV编码到常见视频格式文件)
- 使用excel校验身份证号码是否正确
- 优知学院创始人陈睿:怎样做好一个创业公司CTO?
- 数据采集与埋点简介之 代码埋点、可视化埋点与无痕埋点
- 逻辑函数表达式转化为标准形式
- photoshop旋转图片
- R7 7735HS参数 锐龙77735HS怎么样相当于什么水平级别
- 最小二乘法计算一组数据的斜率(线性回归、趋势计算)
- Oracle数据库中processes参数设置
热门文章
- xboxone硬盘坏的表现_详解硬盘常见的故障及解决方法
- 网站为什么要备案?网站备案流程是什么?
- 百度服务器状态异常,百度抓取异常连接超时是什么意思
- 超级详细的H3C模拟器HCL的交换机Telnet服务配置过程(图文)
- 理解直播及其工作原理
- 计算机日期的格式怎么写,在excel表格中怎么把日期格式改成文本格式(excle表格中改变日期格式)...
- 项目管理计划Office Project 2013 日常使用
- pytorch模型转mxnet
- 分享微云普通用户不限速下载方法
- 跨境贸易EDM邮件使用指南