这是一种自然排序算法,类似于算盘纵向平行柱上面的珠子,纵向平行柱的数量代表待排序数字的最大值,每根柱子上面的柱子数量代表待排序数个数(如待排序数组L = [1, 5, 3, 2, 7, 4],则需要纵向平行柱m=7,每根柱子珠子数量n=6),然后珠子会在重力作用下自由降落。
然而这个算法在真实实现时性能比较『拉夸』,最好情况下时间复杂度为O(n^2),而且只能对正整数进行排序。
待排数组[6 2 4 1 5 9](图A),让所有珠子在重力作用下自由落体,9、5、1都有支撑点,不需要滑落;4除第一个珠子不动外,其它三颗全部下落到1的位置(图B);剩余几个数字做同样自由落地;最终从上到下顺序输出即可得到结果:[ 1 2 4 5 6 9]。
def bead_sort(sequence: list) -> list:
"""
>>> bead_sort([6, 11, 12, 4, 1, 5])
[1, 4, 5, 6, 11, 12]
>>> bead_sort([9, 8, 7, 6, 5, 4 ,3, 2, 1])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> bead_sort([5, 0, 4, 3])
[0, 3, 4, 5]
>>> bead_sort([8, 2, 1])
[1, 2, 8]
>>> bead_sort([1, .9, 0.0, 0, -1, -.9])
Traceback (most recent call last):
...
TypeError: Sequence must be list of nonnegative integers
>>> bead_sort("Hello world")
Traceback (most recent call last):
...
TypeError: Sequence must be list of nonnegative integers
"""
if any(not isinstance(x, int) or x < 0 for x in sequence):
raise TypeError("Sequence must be list of nonnegative integers")
for _ in range(len(sequence)):
for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])):
if rod_upper > rod_lower:
sequence[i] -= rod_upper - rod_lower
sequence[i + 1] += rod_upper - rod_lower
return sequence
if __name__ == "__main__":
assert bead_sort([5, 4, 3, 2, 1]) == [1, 2, 3, 4, 5]
assert bead_sort([7, 9, 4, 3, 5]) == [3, 4, 5, 7, 9]
文章浏览阅读273次。When running Business Central with the embedded jBPM controller mode, a series of endpoints related to managing all aspects of KIE Server templates, instances, and containers are also available. For m..._jbpm
文章浏览阅读460次。这是一个简易的Git提交步骤1:检查你的提交的分支有没有出现,一般情况下都是有的git branch -a2:提交所有修改的文件。git add *3:查看是否添加正确git status4:提交你修改的文件,并且附属上说明内容git commit -a -m “填写你的修改文档”5:提交到服务器git push*记住一定是在..._git commit 出现命令行
文章浏览阅读673次。发表在CVPR2018,是朱政老师的一篇文章,论文链接:FlowTrack这篇文章提出的跟踪器叫作FlowTrack(an end-to-end framework for flow correlation tracking) ,是在具有深度卷积特征的DCF(discriminative correlation filters)上进行加入了flow information,提高了特征表示和跟踪..._end-to-end flow correlation tracking with spatial-temporal attention代码
文章浏览阅读400次,点赞6次,收藏6次。从键盘输入若干人名、地名或者国家名,要求按照升序排序之后输出。7(表示将输入7个人名或者地名)Zhang3Li4Wang5Ma6Chen7Shu8Ren9Chen7Li4Ma6Ren9Shu8Wang5Zhang3输出样例: 这个题我们注意字符串的定义及获取即可!本题要求将给定的n个整数从大到小排序后输出。输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。输出样例:
文章浏览阅读106次。pdf阅读器的跨平台移植。高层可以用qt技术,底层用poppler开源库支持,以及linux操作系统的支持。 移植时用到的环境: 1:linux下的qt4开发环境。 移植用到的知识: 1:熟悉linux下的工程编译方法和环境配置。(对linux比较熟悉) 2:可能会用到cmake生成相应的工程文件。(应掌握cmake生成Makefiel的方法以及cmake的简..._pdf阅读器的移植
文章浏览阅读171次。单元测试也是一个开发中最常见的需求,在Java里我们用JUnit或者TestNG,在clojure里也内置了单元测试的库。标准库的clojure.test,以及第三方框架midje。这里我将主要介绍clojure.test这个标准库,midje是个更加强大的测试框架,广告下,midje的介绍在第二次cn-clojure聚会上将有个Topic,我就不..._clojure deftest
文章浏览阅读60次。如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Ann..._ai annotations
文章浏览阅读4.5k次,点赞2次,收藏19次。linuxdeployqt简介基于Windows-Qt 发布的打包工具windeployqt,主要打包Qt相关依赖库,但是在linux,qt官方并未发布对应的打包版本。在github中,有人开源了这个版本linuxdeployqt,之前一直知道但是没怎么用,最近因为要打包对应工程,又拿出研究了一下。Windows介绍The Windows deployment tool windeployqt is designed to automate the process of creating a d_fhs-like mode with prefix, fhsprefix: "/../..
文章浏览阅读407次。1.//0x202E653dA93c2a06076FC95B0A07E39B6003C5f6 Ropstenpragma solidity ^0.4.23;/** * The CoinFlip contract does nothing... */contract CoinFlip { uint256 lashHash; uint256 Factor = 20244007718664171871063861089; mapping (address => uint)._合约最安全的操作方法
文章浏览阅读341次。Ruby中的循环用于执行相同的代码块指定的次数。本章将详细介绍Ruby支持的循环语句。Rubywhile语句:语法:whileconditional[do]codeend执行代码当条件为true时。while循环的条件是代码中的保留字,换行,反斜杠()或一个分号隔开。实例:#!/usr/bin/ruby$i=0$num=5while$i这将产生以下结果:Insidethe loop i=0In..._oracle break
文章浏览阅读456次。安装node.js安装node教程官网下载安装首先访问node.js的官方网站,下载你需要的node.js版本,然后选择安装,进入官网首页就会有下载提示,如下图所示,根据提示一步一步的来安装检查是否安装成功打开windows的命令行或者使用快捷键win + r,输入node -v出现以下信息表示安装成功,会显示你安装的node版本号通过上述两个步骤就已经完成对node.js的安装..._h5单页面开发有什么脚手架
文章浏览阅读3.2w次,点赞42次,收藏139次。编译内核报错解决方案编辑.config文件vim .config修改CONFIG_SYSTEM_TRUSTED_KEYS,将其置空。# 将该项原有内容删掉即可,如下CONFIG_SYSTEM_TRUSTED_KEYS=""重新编译内核,问题解决。_no rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_c