Bubble

数据结构-排序

☆樱花仙子☆ 提交于 2020-04-11 16:27:18
排序好处: 数据较容易阅读 数据较利于统计及整理 可大幅度减少数据搜索时间 按执行时内存分类 内部排序:排序的数据量小,完全可以在内存内进行排序 冒泡排序法、选择排序法、插入排序法、合并排序法、快速排序法、堆积排序法、希尔排序法、基数排序法 外部排序:排序的数据量无法直接在内存内进行排序,而必须使用辅助存储器(硬盘) 直接合并排序法、K 路合并法、多相合并法 排序算法分析 算法是否稳定 稳定排序是指数据在经过排序后,两个相同键值的记录仍然保持原来的顺序 原始数据:7 (左) 、2、9、7 (右) 、6 稳定排序:2、6、7 (左) 、7 (右) 、9 不稳定排序:2、6、7 (右) 、7 (左) 、9 时间复杂度(省略系数、低阶、常量) 最好情况(Best Case):数据已完成排序 最坏情况(Worst Case):每一键值都需重新排列 平均情况(Average Case):所有情况次数/所有情况数量 空间复杂度 算法在执行过程中所需付出的额外内存空间,仅用到一个额外的空间,空间复杂度最好 内部排序法 排序名称 排序特性 简单排序法 冒泡排序法(Bubble Sort) 稳定排序空间 复杂度为最佳,只需一个额外空间 O(1) 选择排序法(Selection Sort) 不稳定排序 空间复杂度为最佳,只需一个额外空间 O(1) 插入排序法(Insertion Sort) 稳定排序

设计原则之依赖倒置原则(DIP)

只谈情不闲聊 提交于 2020-03-26 00:27:07
3 月,跳不动了?>>> 简介 依赖倒置原则是系统解耦的重要原则,遵循它可以让我们的系统更加健壮。 定义 依赖倒置原则(Dependency Inversion Principle)是 Robert C. Martin 提出的,原则声明了两个方面: 上层模块不应该依赖下层模块,双方都应依赖于抽象。 抽象不应依赖实现,实现应该依赖抽象。 依赖倒置原则的声明中有几个概念:上层、下层,抽象、实现。 上层、下层是一类概念,在计算机的设计中,分层是常见的任务分解方法,每一层都使用下层提供的功能,又为更上层提供自己的功能。依赖倒置原则要求在设计层间通信、交互标准时,不应依赖于某个下层,而是应该依赖于抽象,这样上下层之间就没有强耦合,如果两个实现都遵循了同样的抽象,则可以在上层无感知的情况下替换下层实现。 抽象、实现是一类概念,抽象是对同一类任务本质属性的表达,实现则是具体每一类任务的细节的表达。依赖倒置原则说明实现应该依赖于抽象,是因为实现是对抽象骨架的填充,而抽象不应依赖于实现,是因为抽象是对本质的归纳,应去掉细节的干扰。 看了上面的规则,还需要问一下依赖倒置原则倒置了什么呢? 从字面看依赖倒置当然是倒置了依赖,但核心是控制权的反转。我们从下面的例子来解释。 实践 需求要求实现一个排序系统,系统需要实现各种排序算法,使用方可以根据需要调用不同的排序算法来对自己的数据进行排序。 设计的接口如下

排序算法展示

我是研究僧i 提交于 2020-03-17 01:25:23
某厂面试归来,发现自己落伍了!>>> 排序算法展示 排序定义及其性质 一、冒泡排序   冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。   它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。   这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 二、选择排序   选择排序(Selection sort)是一种简单直观的 排序算法 。它的工作原理是:第一次从待排序的 数据元素 中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 三、插入排序   插入排序(Insertion sort)是一种简单直观且稳定的 排序算法 。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法—— 插入排序法 ,算法适用于少量数据的排序, 时间复杂度 O(n^2)。是稳定的排序方法

Figlet 和 Toilet命令用法

流过昼夜 提交于 2020-03-11 17:14:33
导读 Linux系统 下有一个好玩的命令: figlet,这个命令将普通终端文本转换为大字母,如下所示: linux idc @linuxidc :~$ figlet Linuxidc.com 你也可以通过管道将最后的结果用 figlet 显示出来,Ubuntu下可以通过 apt-get install figlet安装, CentOS 下可以通过sudo yum install figlet来安装。 有许多字体和格式选项,可以使用showfigfonts命令查看可用字体: linuxidc @linuxidc :~/linuxidc.com$ showfigfonts big : _ _ | | (_) | |__ _ __ _ | '_ \| |/ _` | | |_) | | (_| | |_.__/|_|\__, | __/ | |___/ block : _| _| _| _|_|_| _| _|_| _|_|_| _| _| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _| _| _|_|_| _| _|_| _|_|_| _| _| 然后,您可以使用-f选项指定要使用的字体: linuxidc @linuxidc :~$ figlet -f bubble linuxidc.com linuxidc @linuxidc :~$

前端杂谈: DOM event 原理

放肆的年华 提交于 2019-12-05 09:39:27
前端杂谈: DOM event 原理 DOM 事件是前端开发者习以为常的东西. 事件的监听和触发使用起来都非常方便, 但是他们的原理是什么呢? 浏览器是怎样处理 event 绑定 和 触发 的呢? 让我们通过实现一个简单的 event 处理函数 , 来详细了解一下. 首先, 如何注册 event ? 这个相比大家都很清楚了, 有 三种 注册方式: html 标签中注册 <button onclick="alert('hello!');">Say Hello!</button> 给 DOM 节点的 onXXX 属性赋值 document.getElementById('elementId').onclick = function() { console.log('I clicked it!') } 使用 addEventListener() 注册事件 (好处是能注册多个 event handler) document.getElementById('elementId').addEventListener( 'click', function() { console.log('I clicked it!') }, false ) event 在 DOM 节点间是如何传递的呢 ? 简单的来说: event 的传递是 先自顶向下, 再自下而上 完整的来说: event 的传递分为两个阶段

Public AI search engine capable extracting figures

我与影子孤独终老i 提交于 2019-11-30 07:37:04
In 2015, The Allen Institute for Artificial Intelligence — the research organization founded by late Microsoft cofounder Paul Allen — released Semantic Scholar, a public AI search engine capable extracting figures from over 173 million computer science and biomedicine journal papers. It received a warm reception, but researchers at the Institute wondered if its underlying algorithms might be adapted to solve other problems in the field of medical research. To this end, the Allen Institute this week launched Supp AI, a web portal that lets consumers of supplements like vitamins, minerals,

JAVA数据结构与算法(三)、排序算法

泄露秘密 提交于 2019-11-30 05:15:20
排序算法 排 序也称排序算法 (Sort Algorithm ) , 排序是将 一 组 数据,依指定的顺序进行排 列 的 过程。 排 序的分类: 1) 内 部排序 :指将需要处理的所有数据都加 载 到 内部存储器中进行排序。 2 ) 外部排序法:数据量过大,无法全部加载到 内 存 中,需要借助外部存储进 行排序 。 3) 常见的排序算法分类 ( 见 右图): l 算法的时间复杂度 度 量一个程 序 ( 算法 ) 执 行时 间 的 两 种方法 1) 事 后统计的方 法 这种方法可 行 , 但 是有两个 问题 : 一是要想对设计的算法的运行性能进行评测 , 需要 实 际运 行该程序; 二是所得时间的统计量依赖于计算机的硬件、软件等环境因 素 , 这种方式,要在同一台计算机的相同状态下运行,才能比较哪个算法 速 度更快 。 2) 事前估 算的方 法 通过分析某个算法的 时间复杂度 来判断哪个算法更优 . 时 间频 度 时 间频 度 :一 个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度 。记为 T(n) 。 举 例说明 - 基本案例 比 如 计 算 1-100 所有数字之 和 , 我们设计两种算法: T(n)=n+1; T(n)=1; 举例说明 - 忽略常数项 T(n)=2n+20 T(n)=2*n

Qt编写自定义控件11-设备防区按钮控件

余生颓废 提交于 2019-11-29 18:15:26
前言 在很多项目应用中,需要根据数据动态生成对象显示在地图上,比如地图标注,同时还需要可拖动对象到指定位置显示,能有多种状态指示,安防领域一般用来表示防区或者设备,可以直接显示防区号,有多种状态颜色指示,例如布防、撤防、旁路、报警、离线、在线等状态,可以作为一个通用的设备按钮对象使用。 实现的功能 1:可设置防区样式 圆形、警察、气泡、气泡2、消息、消息2 2:可设置防区状态 布防、撤防、报警、旁路、故障 3:可设置报警切换 4:可设置显示的防区号 5:可设置是否可鼠标拖动 效果图 头文件代码 #ifndef BUTTONDEFENCE_H #define BUTTONDEFENCE_H /** * 防区按钮控件 作者:feiyangqingyun(QQ:517216493) 2018-7-2 * 1:可设置防区样式 圆形、警察、气泡、气泡2、消息、消息2 * 2:可设置防区状态 布防、撤防、报警、旁路、故障 * 3:可设置报警切换 * 4:可设置显示的防区号 * 5:可设置是否可鼠标拖动 */ #include <QWidget> #ifdef quc #if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) #include <QtDesigner/QDesignerExportWidget> #else #include <QtUiPlugin